如何使用 Doctrine 查询 NOT NULL?

Posted

技术标签:

【中文标题】如何使用 Doctrine 查询 NOT NULL?【英文标题】:How to query NOT NULL with Doctrine? 【发布时间】:2011-11-10 10:51:35 【问题描述】:

我有表测试:

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

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

aaa
ccc
aaa
ddd

我怎样才能得到:

Doctrine_Core::getTable('Test')->findBy('name', NOTNULL??) <-doesnt working

在模型中:

$this->createQuery('u')
     ->where('name = ?', NOTNULL ???) <- doesnt working
     ->execute();

【问题讨论】:

【参考方案1】:

试试这个:

$this->createQuery('u')
     ->where('name IS NOT NULL')
     ->execute();

这是标准的 SQL 语法。 Doctrine 不会将 Null 值转换为正确的 sql。

【讨论】:

你不能,你需要编写自己的自定义方法。【参考方案2】:

从查询构建器和 Expr 类以 Doctrine 方式进行。

 $qb = $entityManager->createQueryBuilder();
 $result = $qb->select('t')
        ->from('Test','t')
        ->where($qb->expr()->isNotNull('t.name'))
        ->groupBy('t.name')
        ->getQuery()
        ->getResult();

还有 distinct() 函数。

【讨论】:

【参考方案3】:

或者只使用 Doctrine 过滤器:

$filters[] = new Filter('name', null, 'notEqual');

然后

$list = $this->get(yourDBinstance)
        ->setDocIdentifier('TestBundle:Test')
        ->setFilters($filters)
        ->list();

【讨论】:

以上是关于如何使用 Doctrine 查询 NOT NULL?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Symfony ACL 过滤我的 Doctrine 查询

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

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

如何在 Doctrine2 的查询结果中获取 Collection

如何使用Symfony3在Doctrine2 Entity中运行查询查询

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