Doctrine DBAL - WHERE IN array with additional parameter

问题描述:

使用示例文档,我能够得到像这样的查询来工作。Doctrine DBAL - WHERE IN array with additional parameter

SELECT 
f.foo, 
b.bar 
FROM Foo f 
LEFT JOIN Bar b 
WHERE 
f.foo = 20 
AND b.bar IN ? 

使用DBAL,此代码返回结果。

$result = $this->connection->executeQuery(
      $SQL, 
      array($bar_array), 
      array(\Doctrine\DBAL\Connection::PARAM_INT_ARRAY) 
     )->fetchAll(); 

我想寻找f.foo作为一个整数参数,以及寻找IN语句,但我还没有想出如何让它发挥作用,因为所有的示例文档都数组作为唯一参数。

参数和类型是并行数组。所有你应该做的就是添加你的占位符f.foo值,并在类型参数中添加正确的PDO类型。

$SQL = "SELECT f.foo, b.bar 
     FROM Foo f LEFT JOIN Bar b 
     WHERE f.foo = ? AND b.bar IN (?)"; 

$result = $this->connection 
    ->executeQuery($SQL, array($foo, $bar_array),array(
      \PDO::PARAM_INT, 
      \Doctrine\DBAL\Connection::PARAM_INT_ARRAY 
    ))->fetchAll(); 

可以read手册以获取更多信息。

+0

完美!这正是我想要做的。 – Zoot

我刚刚遇到下面的行为,所以我在这里写它,也许它会证明对别人有用。

不能使用命名参数在,所以这段代码不会起作用:

$sql = "SELECT * FROM myTable WHERE name IN (:param_array)"; 

$stmt = $this->db->executeQuery(
     $sql, 
     [ 
      'param_array' => $paramArray 
     ], 
     [ 
      Connection::PARAM_STR_ARRAY 
     ] 
    ); 
+1

上面谢天谢地现在工作正常,因为至少DBAL 2.6(可能更早) – inanimatt