symfony2 / doctrine2 dql,其中字段不为真

KoS*_*MoS 3 mysql sql dql symfony doctrine-orm

即时通讯在使用“ is not true”子句检查布尔字段时遇到麻烦,即时通讯收到此错误:

(“ [语法错误]行0,列510:错误:预期=,<,<=,<>,>,> =,!=,得到了“ IS””)

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

$dql .= " AND p.archived IS NOT TRUE ";
Run Code Online (Sandbox Code Playgroud)

执行的查询:

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
Run Code Online (Sandbox Code Playgroud)

Ren*_*hle 5

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

$dql .= " AND p.archived = 0";
Run Code Online (Sandbox Code Playgroud)

或其他解决方案:

$dql .= " AND p.archived = false";
Run Code Online (Sandbox Code Playgroud)

或者如果您检查 null

$dql .= " AND p.archived is null";
Run Code Online (Sandbox Code Playgroud)

当您查看页面时,您会看到一些表情。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/