Symfony2对象

时间:2015-08-21 04:16:12

标签: php symfony doctrine-query

我在从doctrine对象获取数据时遇到问题。当我使用findOne(id)并尝试访问$result->getVariable()之类的任何变量时,它可以正常工作。但是,只要我使用doctrine查询构建器并添加一些条件,它就会显示

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);
}

我认为由于使用了不同类型的方法,返回的数据存在差异。

提前致谢!

1 个答案:

答案 0 :(得分:1)

那是因为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();
}

如果您正在寻找一组数据,如果您使用不带foreach的IN语句,则 BEST 并将数组直接传递给setParameter:< / p>

$result = $em->createQueryBuilder()->select("s")
    ->from("Entity", "s")
    ->where('s.id IN (:s_id)')
    ->setParameter('s_id', $Ids)
    ->getQuery
    ->getResult();

如果您需要有关查询构建器check the docs的更多信息。