如何“ orderBy”具有可变参数的查询?

时间:2019-06-02 08:46:55

标签: doctrine repository dql

我正在研究带有理论的Symfony4。 在我的存储库中,我获得了信息,但无法通过可变参数(一个用户与许多其他用户之间的距离)进行订购

public function findByThemeAndDistance($theme,$distance,$user){

    $latUser=$user->getAddress()->getLnt();
    $lngUser = $user->getAddress()->getLgt();

    return $this->createQueryBuilder('a')
   // ->select('a as activity,dist(distance) as distance' )
    ->join('a.author','u')
    ->join('u.address','add')
    ->andWhere('a.theme=:val')
    ->andWhere( '(6378 * acos(cos(radians( add.lnt)) * cos(radians(' . $latUser . ')) * cos(radians(' . $lngUser . ') - radians(add.lgt)) + sin(radians(add.lnt )) * sin(radians(' . $latUser . '))))< :distance')
    ->setParameter('distance', $distance)
    ->setParameter('val',$theme)
    ->orderBy('distance','ASC')
    ->getQuery()
    ->getResult()
    ;
}

我尝试按距离排序获得e结果,但是我得到了:

  

错误:预期的Doctrine \ ORM \ Query \ Lexer :: T_IDENTIFIER,得到了“ 1”,并且   当我抹掉阿拉斯时,我得到了:[语义错误]第0行,col   287在“距离ASC”附近:错误:未定义“距离”。

1 个答案:

答案 0 :(得分:0)

由于距离字段在您的实体上不存在,因此必须通过其别名添加选择和排序

->addSelect('dist(distance) as distance')
->orderBy('distance','ASC')