Symfony2 对象
Symfony2 objects
我在从学说对象获取数据时遇到问题。当我使用 findOne(id)
并尝试访问 $result->getVariable()
之类的任何变量时,它工作正常。但是一旦我使用 doctrine query builder 并添加一些条件,它就会说
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();
}
此外,如果您要查找数据数组,BEST 如果您使用不带 foreach
的 IN 语句并将数组直接传递给 setParameter
:
$result = $em->createQueryBuilder()->select("s")
->from("Entity", "s")
->where('s.id IN (:s_id)')
->setParameter('s_id', $Ids)
->getQuery
->getResult();
如果您需要有关查询生成器的更多信息 check the docs。
我在从学说对象获取数据时遇到问题。当我使用 findOne(id)
并尝试访问 $result->getVariable()
之类的任何变量时,它工作正常。但是一旦我使用 doctrine query builder 并添加一些条件,它就会说
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();
}
此外,如果您要查找数据数组,BEST 如果您使用不带 foreach
的 IN 语句并将数组直接传递给 setParameter
:
$result = $em->createQueryBuilder()->select("s")
->from("Entity", "s")
->where('s.id IN (:s_id)')
->setParameter('s_id', $Ids)
->getQuery
->getResult();
如果您需要有关查询生成器的更多信息 check the docs。