【问题标题】:symfony2/doctrine2 dql where field is not truesymfony2/doctrine2 dql where field is not true
【发布时间】:2015-08-26 19:54:36
【问题描述】:

我在使用“不正确”子句检查布尔字段时遇到问题 我收到此错误:

("[Syntax Error] line 0, col 510: Error: Expected =, , >, >=, !=, got 'IS'")

查询是用 dql 构建的。所以在代码中我像这样添加了它

$dql .= " AND p.archived IS NOT TRUE ";

执行的查询:

SELECT COUNT(p.id)
FROM Sandbox\WebsiteBundle\Entity\Pages\OfferPage p
INNER JOIN Kunstmaan\NodeBundle\Entity\NodeVersion nv WITH nv.refId = p.id
INNER JOIN Kunstmaan\NodeBundle\Entity\NodeTranslation nt WITH nt.publicNodeVersion = nv.id and nt.id = nv.nodeTranslation
INNER JOIN Kunstmaan\NodeBundle\Entity\Node n WITH n.id = nt.node WHERE n.deleted = 0
AND n.hiddenFromNav = 0
AND n.refEntityName = 'Sandbox\WebsiteBundle\Entity\Pages\OfferPage'
AND nt.online = 1 AND nt.lang = :lang AND p.archived IS NOT TRUE AND p.expirationDate >= :date ORDER BY p.price ASC

【问题讨论】:

  • 试试最简单的:AND p.archived = 0 AND ...

标签: mysql sql symfony doctrine-orm dql


【解决方案1】:

通常,当您在 Doctrine 中配置了布尔值时,您会有一个带有 0 或 1 的整数字段。检查值是0 还是1 要容易得多。

$dql .= " AND p.archived = 0";

或其他解决方案:

$dql .= " AND p.archived = false";

或者如果你检查到null

$dql .= " AND p.archived is null";

当您查看页面时,您会看到一些表情。 IS 不能在这种情况下使用。

http://doctrine1-formerly-known-as-doctrine.readthedocs.org/en/latest/en/manual/dql-doctrine-query-language.html

这里是另一个链接,向您展示如何使用where inwhere not in

http://www.ozonesolutions.com/programming/2011/09/symfony-doctrine-where-in-and-where-not-in-syntax/

【讨论】:

    【解决方案2】:

    谢谢大家。我有一个可为空的字段。所以我这样做是因为我需要所有不真实的东西。

    $dql .= " AND (p.archived = 0 OR p.archived is null) ";
    

    【讨论】:

      猜你喜欢
      • 2021-09-02
      • 1970-01-01
      • 2014-10-23
      • 2018-01-08
      • 2011-06-03
      • 2022-12-01
      • 2015-01-07
      • 2023-03-25
      • 2018-02-18
      相关资源
      最近更新 更多