Что я должен делать? Мне нужно укрепить доктринные связи между принтером, тонером, лентой и чернилами. Один принтер может просто использовать один из них {тонер, лента, чернила}.
но я не уверен, что это лучший способ сделать это. Я хочу использовать наилучшую практику, насколько это возможно (ООП).
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
{}
Других решений пока нет …