サンプルドキュメントを使用して、このようなクエリを機能させることができました。
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値のプレースホルダーを追加し、types引数に正しい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 マニュアルを参照してください。
以下の動作に遭遇したばかりなので、ここに書いています。おそらく他の人にとって役に立つかもしれません。
INで名前付きパラメーターを使用する場合は注意してください。 type-arrayの名前も繰り返す必要があります。
$sql = "SELECT * FROM myTable WHERE name IN (:param_array)";
$stmt = $this->db->executeQuery(
$sql,
[
'param_array' => $paramArray
],
[
'param_array' => Connection::PARAM_STR_ARRAY
]
);