如何使用Doctrine 2查询NOT NULL?

时间:2017-02-19 08:32:40

标签: php doctrine-orm

我和asked before有完全相同的问题,但最后一个问题是6岁,并且存在新的Doctrine版本,所以我现在要求参考最新版本的Doctrine。

我有桌子测试:

测试:

id | name 
1  | aaa
2  | 
3  | ccc
4  | aaa
5  | 
6  | ddd

我想要名称为NOT NULL的结果:

aaa
ccc
aaa
ddd

这种语法不起作用:

$em->getRepository('Test')->findBy(array('name' => notnull));

是否有类似的东西可以使用findBy语法?

3 个答案:

答案 0 :(得分:2)

没有像findBy这样的快捷方法,但您可以使用查询构建器:

$qb = $em->createQueryBuilder(); // $em is your entity manager
$result = $qb->select("t")
    ->from("Test t")
    ->where($qb->expr()->isNotNull("t.name"))
    ->getQuery()->getResult();

这将为您提供name不是NULL的所有实体。

有关所有查询构建器方法的参考,请参阅http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/query-builder.html,包括可通过$qb->expr()访问的方法。

答案 1 :(得分:0)

您也可以像使用QueryBuilder

$query=$this->dm->createQueryBuilder('AppBundle:DocumentName')
             ->field('fieldName')->notEqual(null);

$ data = $ query-> getQuery()-> execute();

答案 2 :(得分:-1)

我遇到了同样的问题。 免责声明:找不到关于我的答案的任何文献资料,但对我而言有效。 尝试$this->repository->findBy(['active' => !NULL || !0])- 在我的情况下,“活动”可以为NULL,我需要跳过NULL或0值。