Thursday, May 5, 2016

Using Doctrine and Symfony to create Polymorphic like associations

Leave a Comment

I'm attempting to have an Fileable trait that will give provide an Entity with methods to CRUD Files based on the File Entity mentioned below.

After reading the documentation on Doctrine and searching the internet, the best I could find is Inheritance Mapping but these all require the subclass to extend the superclass which is not ideal as the current Entities already extend other classes. I could have FileFoo entity and a FileBar entity but this gets too messy and requires an extra join (super -> sub -> entity).

Alternatively, I could have a File Entity which has many columns for Entities (so foo_id for the Foo object, bar_id for the bar object and so on) but this gets messy and would require a new column for every entity that I'd want to add the Fileable trait too.

So to the questions: Am I thinking about how I want to hold data incorrectly? Is there some features/functions in Doctrine/Symfony that I've missed? Do you think I feature like this would be added if I were to fork Doctrine to add this feature, also where should I look?

<?php /**  * File  *  * @ORM\Table()  * @ORM\Entity()  * @ORM\HasLifecycleCallbacks()  */ class File {     /**      * @var integer      *      * @ORM\Column(type="integer")      * @ORM\Id()      * @ORM\GeneratedValue()      */     protected $id;     /**      * @var string      *      * @ORM\Column(type="string")      */     protected $entityName;     /**      * @var string      *      * @ORM\Column(type="string")      */     protected $entityId; ... 

2 Answers

Answers 1

I accomplished a similar thing using Inheritance defined in traits, which alongside interfaces, basically gave me what a multiple extend would give.

Answers 2

Take a look at embeddables or you could use traits.

If You Enjoyed This, Take 5 Seconds To Share It

0 comments:

Post a Comment