开发者

How can I use a native query with an array IN parameter in Doctrine2

开发者 https://www.devze.com 2023-04-12 10:43 出处:网络
I have this native SQL written in doctrine SELECT COUNT(DISTINCT t.int_task_type_id) as a_count FROM tbl_xref_people_task t

I have this native SQL written in doctrine

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)

I have to write it in native SQL because int_task_type_id is the discriminator column in a hierarchical开发者_StackOverflow中文版 model class.

The problem is that i cannot do the following:

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

or this:

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

How can I solve this?


In case this helps others:

I have just stumbled into this problem with an old Zend 1.11 build using Doctrine 2.0.5 (ish). I found the above did not work with my PDO connection. I believe PDO is adding quotes round the parameter and so you can not use the above.

The only approach I have found that works is:

$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


I think you can do that easily by using:

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

Doctrine will automatically convert $taskType into proper format.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号