Я использую query_builder в formBuilder для получения "форм" из БД. Когда я использую этот запрос
'query_builder' => function (EntityRepository $er) {
return $er->createQueryBuilder('f')
->select('f');
},
оно работает. Но тогда список опций содержит все формы. Но формы могут иметь ревизии, поэтому я хочу сделать только последнюю ревизию из каждой формы и показать ее в списке опций. Чтобы сделать это, я изменил запрос на этот
'query_builder' => function (EntityRepository $er) {
return $er->createQueryBuilder('f')
->select('f, MAX(f.revisionNumber) as max_revision')
->groupBy('f.name');
},
Но с этим запросом я получаю следующее сообщение об ошибке/предупреждении
Warning: spl_object_hash() expects parameter 1 to be object, string given
Что это значит и как я могу это решить?
Я нашел ответ!
Это вопрос, который я должен был использовать, чтобы он работал так, как я хотел.
'query_builder' => function (EntityRepository $er) {
$qb = $er->createQueryBuilder('f')
->select('f')
->where('f.revisionNumber = (SELECT MAX(f2.revisionNumber) FROM AppBundle:Form f2 WHERE f.formKey = f2.formKey GROUP BY f2.formKey)')
;
return $qb;
},
Попробуйте что-то вроде этого
$orderObj = $this->getDoctrine()
->getRepository('') # your repositery ex (StackOrdersBundle:PurchaseOrder)
->createQueryBuilder('f')
->select('f.name, MAX(f.revisionNumber) as max_revision')
->where('') # add if want or remove
->groupBy(f.name)
->getQuery()
->getResult();
select('f.name