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