mirror of
https://github.com/doctrine/orm.git
synced 2026-03-24 06:52:09 +01:00
DDC-1110: CTI Entities always trigger ->find even when I'm calling ->getReference #1391
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @doctrinebot on GitHub (Apr 11, 2011).
Originally assigned to: @guilhermeblanco on GitHub.
Jira issue originally created by user @guilhermeblanco:
Suppose we have some CTI mapped entities:
Without having a given Entity on UnitOfWork IdentityMap, if I do:
It will trigger the ->find (accessing the DB). This is correct on this situation, because the Entity can be either Group or Company. But if I do:
There're no sub-classes anymore (Doctrine doesn't know it, but there are other ways to know), so it should correctly return an instance of CompanyProxy instead of trigger the ->find method.
The solution requires to build the hierarchy of Entities using their ClassMetadata. So it is require to loop though all mapped classes on DiscriminatorMap and check if there's 1 class that subclass the given Entity. If positive, return the result of ->find; otherwise a Proxy can be returned.
This is a non-optimal solution (a better solution would be to cache the hierarchy together with ClassMetadata), but it fixes the issue.
Issue could be considered as major since most CTI scenarios trigger unwanted DB queries, but its usage is so restrict that I left as minor.
We should fix that for 2.1 IMHO.
@doctrinebot commented on GitHub (Apr 12, 2011):
Comment created by @beberlei:
Actually doctrine knows it, see the check for $metadata->subClasses, which is always on the grabbed entity. So the behavior is alraedy correct, no way to optimize it.
Does:
@doctrinebot commented on GitHub (Apr 12, 2011):
Issue was closed with resolution "Can't Fix"