首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Symfony --如何使用querybuilder将数组用作参数?

Symfony --如何使用querybuilder将数组用作参数?
EN

Stack Overflow用户
提问于 2016-01-25 19:49:42
回答 2查看 118关注 0票数 3

我即将输出一个列表,其中包括几个文档(称为弃权)。然而,并不是每个用户都可以查看所有文档,因此我实现了一个筛选器,以检查用户是否有相同的"airline“和"market”分配。因此,每个用户只应该看到分配给他的“航空公司”和“市场”的文件。我是f.e。用户实体的航空公司的getter:

代码语言:javascript
运行
复制
 /**
 * Get airlines
 *
 * @return array 
 */
public function getAirlines()
{
    if($this->airlines != null)
    {
        $airlines = explode(",", $this->airlines);
        return $airlines; 
    }

    return Array();        
}

这是控制器逻辑:

代码语言:javascript
运行
复制
        //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属性与数组而不仅仅是作为参数的字符串进行比较?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-25 19:53:03

我认为您希望使用"IN“语法,而不是"=”语法:

代码语言:javascript
运行
复制
'SELECT w
    FROM WaiverBundle:Waiver w
    WHERE w.carrier IN (:carrier)
    AND w.market = :market
    ORDER BY w.id DESC'
票数 4
EN

Stack Overflow用户

发布于 2016-01-26 05:59:17

您的查询并不复杂。在这种情况下,我认为您应该考虑QueryBuilder而不是DQL。像这样的东西会起作用的:

代码语言:javascript
运行
复制
    $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)
        );
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35001053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档