【问题标题】:Add OR and Like condition in findby()在 findby() 中添加 OR 和 Like 条件
【发布时间】:2014-09-05 04:27:59
【问题描述】:
$data = $this
        ->entityManager
        ->getRepository('io\V1\Rest\Advertisers\AdvertisersEntity')
        ->findBy(
            array('camapId' => '1465' , 'campName'=>'mytest')                
        );

这里想添加条件camapId='1465' OR campName like '%mytest%'
而不是camapId='1465' AND campName ='mytest'
那么有什么办法可以做到这一点呢?

【问题讨论】:

    标签: php zend-framework doctrine-orm conditional-statements query-builder


    【解决方案1】:

    如果您使用 Doctrine2 DQL 或 Doctrine2 QueryBuilder,您可以根据需要使存储库中的搜索条件变得任意复杂。您可以在 Doctrine 文档中阅读有关此 here (DQL)here (QueryBuilder) 的信息。

    网上有很多关于如何使用 DQL 和 QueryBuilder 来达到你的结果的例子。

    我认为会是这样的:

    $data = $this->createQueryBuilder('a')
                 ->where('a.camapId = 1465')
                 ->orWhere('a.campName = mytest')
                 ->getQuery()
                 ->getResult();
    

    【讨论】:

      【解决方案2】:
          $campIdsToFilter = $campIdsToFilterArray =array();
          $query = $this->entityManager->createQuery("SELECT DISTINCT a.campId FROM io\V1\Rest\Advertisers\AdvertisersEntity a where a.campName like'%mytest%' OR a.campId=1465");
      
          $campIdsToFilter = $query->getResult();
          foreach($campIdsToFilter as $ke=> $value){
          $campIdsToFilterArray[] =$value;
      
          }
      
      
          $data = $this
                  ->entityManager
                  ->getRepository('io\V1\Rest\Advertisers\AdvertisersEntity')
                  ->findBy(
                      array('campId' => $campIdsToFilterArray) , 
                      $pageSize,  // limit
                      $pageSize * ($page - 1) // offset              
                  );
      

      【讨论】:

        猜你喜欢
        • 2012-03-04
        • 1970-01-01
        • 1970-01-01
        • 2012-08-06
        • 2012-09-16
        • 2021-01-17
        • 1970-01-01
        • 2019-01-06
        • 2011-02-12
        相关资源
        最近更新 更多