【问题标题】:how do i write not equal to in a doctrine where clause?我如何在学说 where 子句中写不等于?
【发布时间】:2012-05-19 05:59:12
【问题描述】:

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

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

我如何执行上述操作?

谢谢

安德鲁

【问题讨论】:

    标签: zend-framework doctrine-orm


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

    '!=' 表示不相等

    【讨论】:

    • 我已将代码更改为使用 != 现在它根本不返回任何结果,删除的字段是一个 INT,字段值设置为 null 直到记录被删除,然后字段设置为 1,因此我想返回每条不等于 1 的记录。
    【解决方案2】:

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

    【讨论】:

    • 我已将代码更改为使用 != 现在它根本不返回任何结果,删除的字段是一个 INT,字段值设置为 null 直到记录被删除,然后字段设置为 1,因此我想返回每条不等于 1 的记录。
    【解决方案3】:
    $queryBuilder = $repository->createQueryBuilder('a');
    $query = $queryBuilder
        ->where($queryBuilder->expr()->notIn('u.id', 1)
        ->getQuery();
    

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

    【讨论】:

      【解决方案4】:

      只需使用 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'
      )
      

      【讨论】:

        【解决方案5】:

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

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

        表达式生成器:

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

        有关高级解决方案,请参阅 Rawkode 的回答。除了将!= 更改为&lt;&gt; 或使用a.deleted = 0

        最好用 Doctrine 参数化它

        ->where('a.deleted = :deleted')
        ->setParameter('deleted', false);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-04-11
          • 2017-10-08
          • 1970-01-01
          • 1970-01-01
          • 2015-04-21
          • 1970-01-01
          • 1970-01-01
          • 2023-03-18
          相关资源
          最近更新 更多