php - delete - Doctrine DBAL-WHERE IN array con parámetro adicional
symfony database config (2)
Acabo de encontrar el siguiente comportamiento, así que lo estoy escribiendo aquí, tal vez sea útil para otra persona.
Tenga cuidado cuando use parámetros nombrados con IN. Tendrá que repetir los nombres de la matriz de tipos también:
$sql = "SELECT * FROM myTable WHERE name IN (:param_array)";
$stmt = $this->db->executeQuery(
$sql,
[
''param_array'' => $paramArray
],
[
''param_array'' => Connection::PARAM_STR_ARRAY
]
);
Usando los documentos de ejemplo, pude obtener una consulta como esta para trabajar.
SELECT
f.foo,
b.bar
FROM Foo f
LEFT JOIN Bar b
WHERE
f.foo = 20
AND b.bar IN ?
Usando DBAL, este código devuelve resultados.
$result = $this->connection->executeQuery(
$SQL,
array($bar_array),
array(/Doctrine/DBAL/Connection::PARAM_INT_ARRAY)
)->fetchAll();
Me gustaría buscar f.foo como un único parámetro entero así como buscar la declaración IN, pero no he descubierto cómo hacer que funcione, ya que todos los documentos de ejemplo tienen la matriz como único parámetro.
Los parámetros y tipos son matrices paralelas. Todo lo que debe hacer es agregar su marcador de posición para el valor de f.foo y agregar el tipo de DOP correcto en el tipo de argumento.
$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();
Puedes read el manual para más información.