Как я могу использовать собственный запрос с параметром массива IN в Doctrine2 - PullRequest
5 голосов
/ 13 октября 2011

У меня есть этот собственный SQL, написанный в доктрине

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)

Я должен написать его на собственном SQL, потому что int_task_type_id является столбцом дискриминатора в классе иерархической модели.я не могу сделать следующее:

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

или это:

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

Как я могу решить это?

Ответы [ 2 ]

1 голос
/ 26 июня 2015

В случае, если это поможет другим:

Я только что наткнулся на эту проблему со старой сборкой Zend 1.11, использующей Doctrine 2.0.5 (ish). Я обнаружил, что выше не работает с моим подключением PDO. Я считаю, что PDO добавляет кавычки вокруг параметра, и поэтому вы не можете использовать выше.

Единственный подход, который я нашел, который работает:

$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
0 голосов
/ 13 октября 2011

Я думаю, что вы можете сделать это легко, используя:

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

Doctrine автоматически преобразует $taskType в правильный формат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...