9
votes

In a Symfony2 application I have a MainBundle and distinct bundles which can be enabled or not. In the MainBundle I need to have the Model and a basic Entity. In an OtherBundle an Entity with the same table name than Entity in MainBundle.

Fixtures in MainBundle need to be loaded with or without the other bundles than MainBundle :

MainBundle
- Model 
- Entity (Table name "test")
- Fixtures 

OtherBundle
- Entity (Table name "test")
- Fixtures

OtherBundle2
- Entity (Table name="test")
- Fixtures

If i used the @ORM\MappedSuperclass for the Model, a @ORM\Entity for the Entity in MainBundle and @ORM\Entity in OtherBundle then Doctrine2 stop with the error "table already exists".

I cant use the Inheritance table as my model dont need to know about other entities in the other bundles. The @ORM\DiscriminatorMap cant point to OtherBundle.

Is there a way to do this ?

1
This link shows how to make dynamic relations between entities in different bundle. I dont need to link entities from different bundle. I want to have same entity name and table in different bundles.Thibaut
Hello, The obvious solution to your problem is to make a different entity (with different table name). You can extends from the same model. That's obvious because you say you can't do an inheritance, so in term of db, you also cannot. (because of you're using an ORM) Without your logic, I can't give you a more precise help.Nek
I don't get it: If it's the same entity and the same table, why not have it in the main bundle and use it the other bundles. I don't see the problem with a one-way dependency between the bundles.Jasper N. Brouwer
I have the same problem. I have multiple entity that point to the same table. I use it to centralize my uploads. It works, but i can't remove item because of foreign keysChopchop

1 Answers

1
votes

As mentioned by Jasper N. Brouwer it's esentially the same entity and the same table, so there is no point in doing what you're trying to do.

Create your entity in a bundle named for example "SharedEntityBundle" and use resolve_target_entity to relate to this entity from other bundles without them knowing about eachother.

http://symfony.com/doc/current/cookbook/doctrine/resolve_target_entity.html

That being said, there seems to be a solution with multiple entity managers: Symfony 2 / Doctrine 2: Two Entities for the same table, use one in favour of the other