6

我希望有人可以帮助我,我正在我的存储库中编写一个自定义查询,我想做以下事情: -

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

我如何执行上述操作?

谢谢

安德鲁

4

5 回答 5

10

弗朗切斯科的回答是正确的。这完全取决于您使用表达式生成器或高级解决方案的意愿。

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

表达式生成器:

$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);
于 2015-07-16T08:52:09.240 回答
3

只需使用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'
)
于 2014-03-07T16:44:32.337 回答
1
$query = $this->_em->createQueryBuilder()
->select('a')
->from('entity', 'a')
->where('a.deleted != 1') /// how do you write NOT??? i've tried <> etc 
->getQuery();

'!=' 表示不相等

于 2012-05-10T15:56:46.093 回答
1

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

于 2012-05-11T02:26:34.133 回答
1
$queryBuilder = $repository->createQueryBuilder('a');
$query = $queryBuilder
    ->where($queryBuilder->expr()->notIn('u.id', 1)
    ->getQuery();

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

于 2012-06-26T04:29:41.500 回答