2014-05-08 47 views
15

使用示例文檔,我能夠得到像這樣的查詢來工作。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語句,但我還沒有想出如何讓它發揮作用,因爲所有的示例文檔都數組作爲唯一參數。

回答

20

參數和類型是並行數組。所有你應該做的就是添加你的佔位符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

11

我剛剛遇到下面的行爲,所以我在這裏寫它,也許它會證明對別人有用。

不能使用命名參數在,所以這段代碼不會起作用:

$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