【问题标题】:Customize DQL query自定义 DQL 查询
【发布时间】:2014-12-15 14:53:18
【问题描述】:

您好,我有 DQL 查询:

'SELECT t FROM VputiTripBundle:Trip t WHERE IDENTITY(t.profile) != :profile AND (t.startCity = :param0 OR t.targetCity = :param0) AND (t.startCity = :param1 OR t.targetCity = :param1) AND ...

我想把它做成这样(像这样)

'SELECT t FROM VputiTripBundle:Trip t WHERE IDENTITY(t.profile) != :profile AND (t.startCity = :param0 OR t.targetCity = :param0) OR (t.startCity = :param1 OR t.targetCity = :param1) OR ... 

这是我的查询生成器函数:

   public function selectRelatedTrips($assoc, $profileId)
{
    $query = $this
        ->getEntityManager()
        ->createQueryBuilder()
        ->select('t')
        ->from('VputiTripBundle:Trip', 't')
        ->where('IDENTITY(t.profile) != :profile');
    $params['profile']=$profileId;
    foreach ($assoc as $k => $v) {
        $query->andWhere('t.startCity = :param' . $k . ' OR t.targetCity = :param' . $k);
        $params['param' . $k] = $v;
    }

    return $query->setParameters($params)
        ->setMaxResults(20)
        ->orderBy('t.id', 'desc')
        ->getQuery()
        ->getResult();
}

我该怎么做?

【问题讨论】:

    标签: symfony doctrine repository dql doctrine-query


    【解决方案1】:

    试试这个查询:

    $cities = array();
    foreach ($assoc as $k => $v) {
        $cities[] = $v;
    }
    
    $params = array(
        'profile' => $profileId,
        'cities'  => $cities
    );
    
    $query = $this->getEntityManager()
        ->createQueryBuilder()
        ->select('t')
        ->from('VputiTripBundle:Trip', 't');
    
    $query->where(
        $query->expr()->andX(
            $query->expr()->neq('IDENTITY(t.profile)', ':profile'),
            $query->expr()->orX(
                 $query->expr()->in('t.startCity', ':cities'),
                 $query->expr()->in('t.targetCity', ':cities')
            )
        )
    );
    
    return $query->setParameters($params)
        ->setMaxResults(20)
        ->orderBy('t.id', 'desc')
        ->getQuery()
        ->getResult();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-21
      • 1970-01-01
      • 1970-01-01
      • 2012-08-28
      • 2011-02-27
      • 1970-01-01
      相关资源
      最近更新 更多