Details
-
Type:
New Feature
-
Status:
Open
-
Priority:
Major
-
Resolution: Unresolved
-
Affects Version/s: 2.0-BETA2
-
Fix Version/s: None
-
Component/s: ORM
-
Security Level: All
-
Labels:None
Description
Often people present us with the use-case that they want to access the ID of a proxy without loading it.
This has lead to several ugly solutions like mapping the ID to an object and as a foreign key field. There currently exists a simple solution for this:
$id = $em->getUnitOfWork()->getEntityIdentifier($entity->getRelatedProxy());
However we could add a new property here called "idGetter" that would take the name of a method.
During Proxy Generation then this method is created with magic functionality that:
1. In case of Single Primary Key returns the single value
2. In case of Composite Primary Key returns an array of the values in their UoW internal order
3. Throw an Exception if the method does not exist on the original object
Activity
Benjamin Eberlei
made changes -
| Field | Original Value | New Value |
|---|---|---|
| Fix Version/s | 2.1 [ 10022 ] |
Benjamin Eberlei
made changes -
| Workflow | jira [ 11617 ] | jira-feedback [ 13862 ] |
Benjamin Eberlei
made changes -
| Workflow | jira-feedback [ 13862 ] | jira-feedback2 [ 15726 ] |
Benjamin Eberlei
made changes -
| Workflow | jira-feedback2 [ 15726 ] | jira-feedback3 [ 17983 ] |
This list may be incomplete, as errors occurred whilst retrieving source from linked applications:
- Request to http://www.doctrine-project.org/fisheye/ failed: Error in remote call to 'FishEye 0 (http://www.doctrine-project.org/fisheye/)' (http://www.doctrine-project.org/fisheye) [AbstractRestCommand{path='/rest-service-fe/search-v1/crossRepositoryQuery', params={query=DDC-687, expand=changesets[-21:-1].revisions[0:29],reviews}, methodType=GET}] : Received status code 503 (Service Temporarily Unavailable)
What about an @IdGetter annotation. A function instrumented like this would not trigger the lazy load within the proxy.
Something like
class Entity { /** @Id **/ private $id; /** @IdGetter **/ public function getId() { return $this->id; } }would then result in the proxy implementation
After reading the original post I realized that it proposed nearly the same thing. Nevertheless I'll leave it here for clarity. I still think that an annotation on a function would be better, than an annotation which gets the function name as a parameter.
Regards Stefan