2016-12-06 10 views
0

Предположим, у меня есть два документа:Как получить доступ к полям документов, на которые ссылаются друг друга в ODM MongoDB?

Пользователи и покупки. Вся покупка имеет ссылку на пользователя, а у пользователей есть полевое поле.

Я хочу выбрать продукты, купленные клиентами-мужчинами. Итак, у меня есть пол, и я хочу, чтобы итератор думал о покупках и определял их «пол».

Что-то вроде этого

public function findByGender() 
{ 
$query = 
     $this->createQueryBuilder() 
     ->field(""Purchase->User->gender"")->equals('male') 
     ->getQuery() 
     ; 

}

Но, конечно, код между "" ... "" не работает. Я хотел бы знать, если это возможно, и если это так, как я могу это сделать?

ответ

1

Вам нужно отделить этот запрос в 2 запросах. Сначала выберите всех пользователей-мужчин и передайте их во второй запрос. Я рекомендую вам обезводить запросы и выбрать только необходимое.

$users = $this->createQueryBuilder() 
    ->hydrate(false) 
    ->select('_id') 
    ->field('gender')->equals('male') 
    ->getQuery()->execute()->toArray(); 

$products = $this->createQueryBuilder() 
    ->hydrate(false) 
    ->field('user.id')->in(array_keys($users)) 
    ->getQuery()->execute()->toArray();