我即将输出一个包含多个文档(称为豁免)的列表。然而,并不是每个用户都应该被允许查看所有文档,因此我实现了一个过滤器来检查用户是否分配了相同的“航空公司”和“市场”。所以每个用户应该只能看到分配给他的“航空公司”和“市场”的文件。 这是 f.e.用户实体航空公司的 setter/getter :
/**
* Get airlines
*
* @return array
*/
public function getAirlines()
{
if($this->airlines != null)
{
$airlines = explode(",", $this->airlines);
return $airlines;
}
return Array();
}
这是 Controller 逻辑:
//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 属性与数组进行比较,而不仅仅是将字符串作为参数?
最佳答案
我想你想使用“IN”语法,而不是“=”语法:
'SELECT w
FROM WaiverBundle:Waiver w
WHERE w.carrier IN (:carrier)
AND w.market = :market
ORDER BY w.id DESC'
关于php - Symfony - 如何使用查询构建器将数组用作参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35001053/