我希望有人可以帮助我,我正在我的存储库中编写一个自定义查询,我想做以下事情: -
$query = $this->_em->createQueryBuilder()
->select('a')
->from('entity', 'a')
->where('a.deleted not 1') /// how do you write NOT??? i've tried <> etc
->getQuery();
我如何执行上述操作?
谢谢
安德鲁
我希望有人可以帮助我,我正在我的存储库中编写一个自定义查询,我想做以下事情: -
$query = $this->_em->createQueryBuilder()
->select('a')
->from('entity', 'a')
->where('a.deleted not 1') /// how do you write NOT??? i've tried <> etc
->getQuery();
我如何执行上述操作?
谢谢
安德鲁
弗朗切斯科的回答是正确的。这完全取决于您使用表达式生成器或高级解决方案的意愿。
对于您的特定情况,您可以选择两者之一。
表达式生成器:
$queryBuilder = $this->_em->createQueryBuilder();
$expr = $queryBuilder->expr();
$query = $queryBuilder
->select('a')
->from('entity', 'a')
->where($expr->neq('a.deleted', 1))
->getQuery();
有关高级解决方案,请参阅 Rawkode 的回答。除了更改!=
to<>
或使用a.deleted = 0
.
更好的是用 Doctrine 参数化它
->where('a.deleted = :deleted')
->setParameter('deleted', false);
只需使用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'
)
$query = $this->_em->createQueryBuilder()
->select('a')
->from('entity', 'a')
->where('a.deleted != 1') /// how do you write NOT??? i've tried <> etc
->getQuery();
'!=' 表示不相等
!= 表示不等于 !=== 表示不等于
$queryBuilder = $repository->createQueryBuilder('a');
$query = $queryBuilder
->where($queryBuilder->expr()->notIn('u.id', 1)
->getQuery();
我不确定查询构建中的不等于运算符。但是,这可能会对您有所帮助。顺便说一句,我也在寻找更好的答案。