我即将输出一个列表,其中包括几个文档(称为弃权)。然而,并不是每个用户都可以查看所有文档,因此我实现了一个筛选器,以检查用户是否有相同的"airline“和"market”分配。因此,每个用户只应该看到分配给他的“航空公司”和“市场”的文件。我是f.e。用户实体的航空公司的getter:
/**
* Get airlines
*
* @return array
*/
public function getAirlines()
{
if($this->airlines != null)
{
$airlines = explode(",", $this->airlines);
return $airlines;
}
return Array();
}
这是控制器逻辑:
//Get User:
$user = $this->container->get('security.context')->getToken()->getUser();
// Gets an Array of User markets
$user_markets = $user->getMarkets();
// Gets an Array of User carriers
$user_airlines = $user->getAirlines();
if(!$this->ROLE_IS(Array( 'ROLE_XY'))){
$query = $em->createQuery(
'SELECT w
FROM WaiverBundle:Waiver w
WHERE w.carrier = :carrier
AND w.market = :market
ORDER BY w.id DESC'
)
->setFirstResult($page*10-10)
->setMaxResults(10)
// I wan't to get the whole array and not just one position here:
->setParameters(array(':carrier'=>$user_airlines[0],
':market'=>$user_markets[0],
));
}else{
$query = $em->createQuery(
'SELECT u
FROM WaiverBundle:Waiver u
ORDER BY u.id DESC'
)
->setFirstResult($page*10-10)
->setMaxResults(10);
}
问题:如何将DQL属性与数组而不仅仅是作为参数的字符串进行比较?
发布于 2016-01-25 19:53:03
我认为您希望使用"IN“语法,而不是"=”语法:
'SELECT w
FROM WaiverBundle:Waiver w
WHERE w.carrier IN (:carrier)
AND w.market = :market
ORDER BY w.id DESC'
发布于 2016-01-26 05:59:17
您的查询并不复杂。在这种情况下,我认为您应该考虑QueryBuilder而不是DQL。像这样的东西会起作用的:
$qb = $em->createQueryBuilder();
$qb->select('w')
->from('WaiverBundle:Waiver', 'w')
->where($qb->expr()->in('w.carrier', ':carrier'))
->andWhere($qb->expr()->eq('w.market', ':market'))
->orderBy('w.id', 'DESC')
->setParameters(
array(
'carrier'=>$user_airlines[0],
'market'=>$user_markets[0)
);
https://stackoverflow.com/questions/35001053
复制相似问题