我怎么写不等于教条where子句?

时间:2012-05-10 15:53:43

标签: zend-framework doctrine-orm

我希望有人可以帮助我,我正在我的存储库中编写自定义查询,我想要执行以下操作: -

$query = $this->_em->createQueryBuilder()
->select('a')
->from('entity', 'a')
->where('a.deleted not 1') /// how do you write NOT??? i've tried <> etc 
->getQuery();

我如何执行上述操作?

由于

安德鲁

5 个答案:

答案 0 :(得分:7)

Francesco的回答是正确的。这完全取决于您使用表达式构建器或高级解决方案的意愿。

对于您的特定情况,您可以选择其中之一。

表达式构建器:

$queryBuilder = $this->_em->createQueryBuilder();
$expr = $queryBuilder->expr();

$query = $queryBuilder
    ->select('a')
    ->from('entity', 'a')
    ->where($expr->neq('a.deleted', 1))
    ->getQuery();

对于高级解决方案,请参阅Rawkode的回答。除了将!=更改为<>或使用a.deleted = 0

更好的是用Doctrine

进行参数化
->where('a.deleted = :deleted')
->setParameter('deleted', false);

答案 1 :(得分:2)

只需使用 neq(),如下例所示:

$query = $repository->createQueryBuilder('t');
$expr = $query->expr();
$orx = $expr->orX();

$orx->add($expr->neq('t.pageTitle', $expr->literal('value1')));
$orx->add($expr->neq('t.metaDescription', $expr->literal('value2')));

$query->andWhere($orx);

上面的代码产生:

AND (
    t1_.page_title <> 'value1' 
    OR t1_.meta_description <> 'value2'
)

答案 2 :(得分:1)

$query = $this->_em->createQueryBuilder()
->select('a')
->from('entity', 'a')
->where('a.deleted != 1') /// how do you write NOT??? i've tried <> etc 
->getQuery();

'!='表示不相等

答案 3 :(得分:1)

!=表示不等于 !===表示与

不同

答案 4 :(得分:1)

$queryBuilder = $repository->createQueryBuilder('a');
$query = $queryBuilder
    ->where($queryBuilder->expr()->notIn('u.id', 1)
    ->getQuery();

我不确定在查询构建中不等于运算符。但是,这可能会对你有所帮助。 顺便说一下,我也在寻找更好的答案。