【问题标题】:Symfony2 objectsSymfony2 对象
【发布时间】:2015-11-14 22:10:05
【问题描述】:

我在从学说对象获取数据时遇到问题。当我使用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);
}

我认为这是由于使用的方法类型不同,返回的数据不同。

提前致谢!

【问题讨论】:

    标签: php symfony doctrine-query


    【解决方案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 语句并将数组直接传递给setParameter,则BEST

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

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

    【讨论】:

    • 我会使用setParameter(因为setParameters需要一个数组),我不会使用array_values,因为直接传递数组就可以了。
    • 第二种方法仍然是最好的,你也应该强调这种做法;)
    • 谢谢,现在答案措辞更好。
    • 另一种选择就像$queryBuilder = $em->getQuerBuilder(); $result = $queryBuilder...... ->where($queryBuilder->expr()->in('s.id', ':ids'))->setParameter('ids', $ids),而不是直接构建表达式。
    • 好的。感谢您的查询。现在我想在我的查询中添加一个 if 条件。我已经为此更新了我的问题。抱歉,我最初没有在我的问题中发布。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-20
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 2014-03-31
    • 2014-03-07
    • 1970-01-01
    相关资源
    最近更新 更多