[MODM-145] QueryBuilder references() to does not support references on embedded objects' fields Created: 23/May/11 Updated: 25/Oct/11 |
|
| Status: | Open |
| Project: | Doctrine MongoDB ODM |
| Component/s: | Query Builder |
| Affects Version/s: | None |
| Fix Version/s: | None |
| Type: | New Feature | Priority: | Minor |
| Reporter: | Jeremy Mikola | Assignee: | Jonathan H. Wage |
| Resolution: | Unresolved | Votes: | 0 |
| Labels: | None | ||
| Description |
|
I noticed that the references() method does not support fields on embedded objects, as the argument to the preceding field() method will be passed into getFieldMapping() and trigger an exception. I suppose a solution would require multiple calls to getFieldMapping() in order to dive into the embedded object's class metadata. To demonstrate, below is an example of a UserRepository class. The User document contains an embeddedObject that itself references another User: class UserRepository extends DocumentRepository { public function findByEmbeddedObjectReference(User $user) { return $this->createQueryBuilder() ->field('embeddedObject.user.$id')->equals($user->getId()) // ->field('embeddedObject.user')->references($user) ->getQuery() ->execute(); } } Using field()/equals() works fine as an alternative to references(), so there is no urgent need for this feature. |
| Comments |
| Comment by Nicolas Brignol [ 25/Oct/11 ] |
|
Hi It seems that we have a problem with the temporary solution proposed : obj->field('embedded.referenced.$id')->equals($reference->getId())
will generate the query without "$id". Did someone experience this issue ? |