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)
通常,当您在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
不能在那种情况下使用。
这是另一个链接,向您展示如何使用where in
和where not in
http://www.ozonesolutions.com/programming/2011/09/symfony-doctrine-where-in-and-where-not-in-syntax/