Doctrine创建带有绑定参数的子查询

时间:2015-12-09 11:14:12

标签: doctrine symfony-1.4 doctrine-1.2 doctrine-query

我正在尝试构建一个查询,该查询基本上会将其id在另一个表中有2个特定条目的所有条目拉出来,所以我正在尝试以下内容:

    $query      = $this->createQuery('e');

    $subquery1 = $query->createSubquery('sea')
                       ->select('sea.entry_id')
                       ->from('Table sea')
                       ->addWhere('sea.form_element_id = ?', $element)
                       ->addWhere('sea.answer = ?', $answer)
                       ->getDQL();

    $subquery2 = $query->createSubquery('sea2')
                       ->select('sea2.entry_id')
                       ->from('Table sea2')
                       ->addwhere('sea2.form_element_id = ?', $element2)
                       ->addWhere('sea2.answer = ?', $answer2)
                       ->getDQL();

    $query->addWhere('e.id IN ?', $subquery1)
          ->addWhere('e.id IN ?', $subquery2);

    return $query->execute();

然而,这给了我一个关于绑定参数的错误。

构建此类子查询的正确方法是什么?

请注意,如果我不绑定子查询中的参数,它可以正常工作。

1 个答案:

答案 0 :(得分:1)

$nestedQuery = " id IN (SELECT sea.entry_id from table sea where sea.form_element_id = ? and sea.answer = ?) "
                . " and id IN (SELECT sea2.entry_id from table sea2 where sea2.form_element_id = ? and sea2.answer = ?)";


    return $this->findBySql($nestedQuery, array($param1, $param2, $param3, $param4));

这显然会返回一个教义集合,但你可以执行getFirst或循环返回的对象,甚至可以使用Hydrator来获取数组!