如何在 Doctrine 查询生成器中进行多个 WHERE IN 列查询?

Posted

技术标签:

【中文标题】如何在 Doctrine 查询生成器中进行多个 WHERE IN 列查询?【英文标题】:How to make multiple WHERE IN column query in Doctrine query builder? 【发布时间】:2015-10-04 18:36:51 【问题描述】:

我想使用带有两列检查的 WHERE IN 语句更新 db 中的多条记录。

Pure mysql 原始查询看起来像这样.. 它可以工作:

UPDATE poll_quota q SET q.count = q.count+1 WHERE q.form_id=14 AND ((q.field_id,q.value) IN (('A',1),('B',1)))

我的代码:

$this->createQueryBuilder("q")
            ->update()
            ->set("q.count","q.count+1")
            ->where("q.form_id=:form_id")
            ->andWhere("((q.field_id,q.value) IN (:wherein))")
            ->setParameter(":form_id",$form_id)
            ->setParameter(":wherein",$where_in)
            ->getQuery()
            ->execute()
        ;

输出:

[Syntax Error] line 0, col 103: Error: Expected Doctrine\ORM\Query\Lexer::T_CLOSE_PARENTHESIS, got ','

[1/2] QueryException: UPDATE Edge\PollBundle\Entity\Quota q SET q.count = q.count+1 WHERE q.form_id=:form_id AND ((q.field_id,q.value) IN (:wherein))   +

尝试这样做,也不起作用:

[...]->andWhere("((q.field_id,q.value) IN ($where_in))")

$where_in 包含这样的字符串:

"('A',1),('B',1)"

【问题讨论】:

你不能只用->andWhere("q.field_id IN (:wherein)")->andWhere("q.value IN (:wherein)")吗? 脚本仅更新选定的 field_id 和 value 对。在这种情况下,单独的 IN 语句将不起作用。 不幸的是,我认为我并不真正了解脚本的作用/将要做什么。 【参考方案1】:

DQL 不允许在 WHERE IN 语句中使用多个列,因为并非所有 DBMS 都支持它。您可以使用 $this->getEntityManager()->getConnection()->executeUpdate() 使用原始 SQL 运行它

【讨论】:

我担心这就是问题所在。感谢您的帮助

以上是关于如何在 Doctrine 查询生成器中进行多个 WHERE IN 列查询?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用doctrine查询生成器编写此sql查询?

Doctrine MongoDB ODM 在两个或多个字段中搜索

Doctrine MongoDB ODM 在两个或多个字段中搜索

有人可以建议一种使用带有多个“where”子句的 Doctrine (QueryBuilder) 进行此查询的方法吗?

如何使用多个数据库模式管理 Doctrine 查询

如何在doctrine zend中没有实体的情况下继续加入查询构建器