Объекты Symfony2

У меня проблема с получением данных от объекта доктрины. Когда я использую 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);
}

Я думаю, что это разница в данных, возвращаемых из-за различных типов используемых методов.

Заранее спасибо!

0

Решение

Это потому, что 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();

Если вам нужна дополнительная информация о построителе запросов проверить документы.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]