Doctrine 使用绑定参数创建子查询
Doctrine create subquery with bound params
我正在尝试构建一个查询,该查询基本上会提取其 ID 在另一个 table 中有 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();
然而,这给了我一个关于绑定参数的错误。
构造此类子查询的正确方法是什么?
请注意,如果我不在子查询中绑定参数,它就可以正常工作。
$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));
这显然 returns 是一个学说集合,但您可以执行 getFirst 或循环返回的对象,甚至可以使用 Hydrator 来获取数组!
我正在尝试构建一个查询,该查询基本上会提取其 ID 在另一个 table 中有 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();
然而,这给了我一个关于绑定参数的错误。
构造此类子查询的正确方法是什么?
请注意,如果我不在子查询中绑定参数,它就可以正常工作。
$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));
这显然 returns 是一个学说集合,但您可以执行 getFirst 或循环返回的对象,甚至可以使用 Hydrator 来获取数组!