在findby()中添加OR和Like条件

时间:2014-09-05 04:28:00

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

$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'
有没有办法实现这个目标?。

2 个答案:

答案 0 :(得分: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();

答案 1 :(得分:0)

    $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              
            );