mirror of
https://github.com/doctrine/orm.git
synced 2026-03-23 22:42:18 +01:00
DDC-774: Getting the primary key of a reference fetches the object from database #956
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 (Aug 27, 2010).
Jira issue originally created by user arnaud-lb:
When creating a reference (i.e.
$ref = $em->getReference('\Foo', 1);), getting the value of the primary key (i.e.$ref->getId();) fetches the object from the database.My understanding ot Doctrine is that the references are proxies to real objects, and that calling any method on them will trigger a fetch from the database, which makes sense.
May be this could be improved so that proxies have a check like
if (I*am_a_reference() and this_is_a_pkey_getter()) return $pkey). This_is_a_pkey*getter() could get its knowledge from some @PrimaryKeyGetter entity annotation.The references could then be used in place of the PartialReferences, without the huge WTF-factor of partial references and partial objects.
@doctrinebot commented on GitHub (Aug 27, 2010):
@doctrinebot commented on GitHub (Aug 27, 2010):
Comment created by arnaud-lb:
Something like this would be awesome :
Or this:
@doctrinebot commented on GitHub (Aug 27, 2010):
Comment created by romanb:
We thought about that but there is always the risk that these methods, for whatever reason, have side-effects and/or access other entity state, in which case lazy-loading is completely bypassed. As you already have noticed Doctrine right now can simply not know what is an "id getter" and moreso whether it is free of side-effects.
Meanwhile you can always get the identifier of any managed object (all "references" are managed, as well as all partial objects and all proxies) without triggering any lazy-loading via:
Hope that helps.
@doctrinebot commented on GitHub (Aug 27, 2010):
Comment created by arnaud-lb:
Thanks
Then it would be the responsibility of @NoProxy getters to take care of what they do. Entities already have this kind of responsibility with lazy-loaded references (i.e. some private fields can't be accessed directly by the entity itself).
@doctrinebot commented on GitHub (Aug 27, 2010):
Comment created by arnaud-lb:
Actually you can even make the proxy getter return the primary key directly ;-)
@doctrinebot commented on GitHub (Aug 27, 2010):
Comment created by romanb:
@"Entities already have this kind of responsibility with lazy-loaded references (i.e. some private fields can't be accessed directly by the entity itself)."
Can you clarify what you mean with that? I am not aware of such a restriction.
@doctrinebot commented on GitHub (Aug 27, 2010):
Comment created by arnaud-lb:
I was wrong on this one, there is no such restriction.
@doctrinebot commented on GitHub (Sep 15, 2010):
Comment created by @beberlei:
This issue can be solved with the implementation of DDC-522
@doctrinebot commented on GitHub (Sep 15, 2010):
Issue was closed with resolution "Won't Fix"