2
我該怎麼辦?我需要建立打印機,碳粉,墨盒和墨水之間的學說聯繫。一臺打印機可以使用其中一種{碳粉,膠帶,墨水}。學說PHP協會symfony3
但我不知道什麼是最好的方式來做到這一點。我想盡可能使用最佳實踐(OOP)。
我該怎麼辦?我需要建立打印機,碳粉,墨盒和墨水之間的學說聯繫。一臺打印機可以使用其中一種{碳粉,膠帶,墨水}。學說PHP協會symfony3
但我不知道什麼是最好的方式來做到這一點。我想盡可能使用最佳實踐(OOP)。
Doctrine2支持inheritance mapping - 您可以使用它:
/**
* @ORM\Table
* @ORM\Entity
*/
class Printer
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\OneToOne(targetEntity="Consumable")
*/
private $consumable;
}
/**
* @ORM\Entity
* @ORM\InheritanceType("SINGLE_TABLE")
* @ORM\DiscriminatorColumn(name="discr", type="string")
* @ORM\DiscriminatorMap({"toner" = "Toner", "ink" = "Ink"})
*/
abstract class Consumable
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var \DateTime
*
* @ORM\Column(name="created_at", type="datetime")
*/
private $createdAt;
/**
* @var \DateTime
*
* @ORM\Column(name="updated_at", type="datetime")
*/
private $updatedAt;
}
/**
* @ORM\Entity
*/
final class Toner extends Consumable
{}
/**
* @ORM\Entity
*/
final class Ink extends Consumable
{}
聽起來像是你將需要一個交叉引用/外部參照表?這是你的想法嗎? – ficuscr
是的,我認爲在類似的東西,但我不太確定如何做到這一點。我應該爲此實現一個接口嗎? – onBassTaiji
因此,如果'type_of_consumable_id'是一個FK,你怎麼知道什麼表?似乎你缺乏背景。 'type_of_consumable_type'或其他...... – ficuscr