I have several different entities that I want to make "Copyable" in my 
application, and define both properties with default values and methods 
with implementation. I am confused about how to go about this, using Traits 
vs. Interfaces, and how to get Doctrine to properly associate the entity to 
its "original" entity.

So for example, I have an Item, and when we copy an item (the users then 
edit the new version, but we want to know which one it was originally 
copied from) I want to automatically add some text to the end of it's name. 
Another entity will have different text added to the end of a different 
field, but basically anything that can be copied shares this behavior that 
when you copy it, some text is added to the end of a designated field, so I 
want two properties (for the text, and the field) and then a property for 
the original id.

I need to be able to define the copiedFrom association for these entities, 
but if I use a trait, I cannot override the Doctrine association later, and 
if I use an interface, I can't define the Doctrine association to begin 
with, only the methods such as getFieldToChange(), etc.

I tried setting it up as a trait where the $copiedFrom property simply has 
no mapping, and then set up an association override in the model that uses 
the trait, but this appears to create an infinite loop of some sort, and we 
run out of memory.

 * @AssociationOverrides({
 *      @AssociationOverride(name="copiedFrom",
 *          joinColumns=@JoinColumn(
 *              name="copied_from_id", referencedColumnName="id"
 *          )
 *      )
 * })

Is there another way to approach this, perhaps using a custom annotation, 
or some other design??

What I have done in order to get it to function for now is remove the 
$copiedFrom property from the trait, and manually define it in each class 
that uses Copyable, however I'm pretty sure this is not the "right" way.


(x-post to SO)

-- 
You received this message because you are subscribed to the Google Groups 
"doctrine-user" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/doctrine-user.
For more options, visit https://groups.google.com/d/optout.

Reply via email to