gpt4 book ai didi

php - 如何在 Doctrine2 中使用带有数组 IN 参数的 native 查询

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:48:33 25 4
gpt4 key购买 nike

我有这个用 doctrine 写的原生 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');

我该如何解决这个问题?

最佳答案

如果这对其他人有帮助:

我刚刚在使用 Doctrine 2.0.5 (ish) 的旧 Zend 1.11 构建中遇到了这个问题。我发现以上不适用于我的 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

关于php - 如何在 Doctrine2 中使用带有数组 IN 参数的 native 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7747689/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com