2011-10-12 5 views
5

tengo este SQL nativo escrita en la doctrina¿Cómo puedo utilizar una consulta nativa con una matriz en parámetro en Doctrine2

SELECT COUNT(DISTINCT t.int_task_type_id) as a_count 
FROM tbl_xref_people_task t 
WHERE t.bit_completed = true AND 
     t.int_people_id = :peopleId AND 
     t.int_task_type_id IN (:taskType) 

tengo que escribirlo en SQL nativo, porque int_task_type_id es la columna discriminadora en un modelo jerárquico clase.

El problema es que yo no puedo hacer lo siguiente:

$query->setParameter(':taskType', implode(', ',$taskType)); 

o esto:

$query->setParameter(':taskType', $taskType, 'array'); 

¿Cómo puedo solucionar esto?

Respuesta

0

Creo que se puede hacerlo fácilmente mediante el uso de:

$query->setParameter('taskType', $taskType);

Doctrina convertirá automáticamente $taskType en formato adecuado.

+0

No en este caso, que se queja de cambiar arreglo a cadena. –

1

En caso de que esto ayuda a los demás:

yo sólo han tropezado con este problema con una vieja Zend 1.11 build usando Doctrina 2.0.5 (más o menos). Descubrí que lo anterior no funcionaba con mi conexión PDO. Creo que PDO está agregando comillas alrededor del parámetro y por lo tanto no puede usar lo anterior.

El único método que he encontrado que funciona es:

$types = []; 
$binds = []; 
$values = []; 

foreach ($taskTypes as $taskType) { 
    $types[] = \PDO::INT; 
    $binds[] = '?'; 
    $values[] = $taskType; 
} 
// Get Entity Manager from wherever 
$conn = $entityManager->getConnection(); 
$stmt = $conn->executeQuery("SELECT COUNT(DISTINCT 
    t.int_task_type_id) as a_count 
    FROM tbl_xref_people_task t 
    WHERE t.bit_completed = true AND 
    t.int_people_id = :peopleId AND 
    t.int_task_type_id IN (" . implode(',', $binds) . ")", 
    $values, 
    $types 
); 
$stmt->execute(); 
$stmt->fetchAll(); // Fetch 
Cuestiones relacionadas