【问题标题】: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
);