I am migrating an old PHP project to Symfony. I am trying to create the entities based on the existing database schema which I can not change. I am facing a problem :
There is a table that would represent two different entities. Basically, there is a boolean (a tinyint(1)
), if the boolean is false, then the row of the table is representing a cart. If the boolean is true, then the row is representing an order.
Is it possible for Doctrine to make the distinction between these and to fetch those entities accordingly ? The solution I was willing to implement was creating several entities and overwrite the find()
and findAll()
methods in these entities’ repositories. Is there another way to achieve that ?
Advertisement
Answer
This is what doctrine call Inheritance Mapping.
So you’ll have one Cart
entity and one Order
entity extended it.
/** * @ORMTable() * @ORMEntity(repositoryClass="AppRepositoryCartRepository") * @ORMInheritanceType(value="SINGLE_TABLE") * @ORMDiscriminatorColumn(name="is_order", columnDefinition="BOOL DEFAULT FALSE") * @ORMDiscriminatorMap( * value={ * CART::IS_CART=Cart::class, * CART::IS_ORDER=Order::class * } * ) */ class Cart { const IS_CART = FALSE; const IS_ORDER = TRUE; ... // Entity field, getters, setters, functions... }
Then your Order
Entity.
/** * @ORMEntity(repositoryClass=OrderRepository::class) */ class Order extends Cart {...}
There is maybe some mistake in this code I didn’t test it but it should be ok.