2015-12-01 3 views
1

Я хотел бы создать запрос, который фильтрует элементы массива ролей. Мне нужны пользователи, у которых есть роль admin или роль пользователя. Это (часть) мой документ:Doctrine Mongo ODM find in array

{ 
    "username": "test_joe", 
    "email": "[email protected]", 
    "enabled": true, 
    "roles": [ 
     "admin", 
     "user", 
     "guest" 
    ] 
} 

Я пытался что-то вроде этого, но это не правильный:

$qb = $dm->getRepository('AppBundle:User')->createQueryBuilder('user') 
     ->select('email'); 

$qb->addOr($qb->expr()->field('roles.admin')->exists(true)); 
$qb->addOr($qb->expr()->field('roles.user')->exists(true)); 

ответ

2

Там нет поля roles.admin в документе. Это поле "roles" с массивом значений. Согласование MongoDB является полиморфным на массивах, поэтому вы можете совместить так же, как и вы, с полем "roles": "admin" Так что вам не нужно, но что-то вроде ->field('roles')->equals('admin')

+0

aaand it works, thanks :) – kozmon