Как «заказать» запрос с переменным параметром? - PullRequest
0 голосов
/ 02 июня 2019

Я работаю над 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()
    ;
}

Я пытаюсь получить результат, упорядоченный по расстоянию, но получаю следующее:

Ошибка: ожидаемая доктрина \ ORM \ Query \ Lexer :: T_IDENTIFIER, получила '1' и когда я стираю alais, я получаю это: [Семантическая ошибка] строка 0, столбец 287 возле «расстояния ASC»: ошибка: «расстояние» не определено.

1 Ответ

0 голосов
/ 03 июня 2019

Так как поле расстояния не существует в вашей сущности, вы должны добавить выбор и порядок по его псевдониму

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