У меня проблема с получением данных от объекта доктрины. Когда я использую findOne(id)
и попробуйте получить доступ к любой переменной, как $result->getVariable()
это работает отлично. Но как только я использую конструктор запросов доктрины и добавляю некоторые условия, он говорит:
Attempted to call method "getVariable" on class "Doctrine\ORM\QueryBuilder....
Мой код
foreach ($Ids as $Id) {
$result = $em->createQueryBuilder()->select("s")
->from("Entity", "s")
->where('s.id = :s_id')
->setParameters(array('s_id'=>$Id));
if($category)
{
$result->innerJoin('s.cat','c');
$result->where("c.primaryClassification = :category");
result->setParameter('category',$category);
}
}
Код, который работает
foreach ($Ids as $Id) {
$em->getRepository("Entity")->findOneById($Id);
}
Я думаю, что это разница в данных, возвращаемых из-за различных типов используемых методов.
Заранее спасибо!
Это потому, что QueryBuilder предназначен только для этого, чтобы создавать запросы (BA-DUM-TSS).
Вам нужно выполнить запрос после его создания и правильно установить параметр для =
:
foreach ($Ids as $Id) {
$query[] = $em->createQueryBuilder()->select("s")
->from("Entity", "s")
->where('s.id = :s_id')
->setParameter('s_id', $Id))
->getQuery()
->getResult();
}
Также, если вы ищете массив данных, это ЛУЧШИЙ если вы используете оператор IN без foreach
и передать массив непосредственно в setParameter
:
$result = $em->createQueryBuilder()->select("s")
->from("Entity", "s")
->where('s.id IN (:s_id)')
->setParameter('s_id', $Ids)
->getQuery
->getResult();
Если вам нужна дополнительная информация о построителе запросов проверить документы.
Других решений пока нет …