symfony — Доктрина PHP ассоциаций symfony3

Что я должен делать? Мне нужно укрепить доктринные связи между принтером, тонером, лентой и чернилами. Один принтер может просто использовать один из них {тонер, лента, чернила}.

но я не уверен, что это лучший способ сделать это. Я хочу использовать наилучшую практику, насколько это возможно (ООП).

введите описание изображения здесь

2

Решение

Doctrine2 поддерживает отображение наследования — вы можете использовать это:

/**
* @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
{}
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector