Как я могу передать ранее объявленный столбец DB :: raw () в запрос whereRaw () - PullRequest
1 голос
/ 21 мая 2019

У меня есть красноречивый запрос, который получает идентификатор пользователя и его расстояние от вашей собственной позиции

 $lat = Auth::user()->lat;
 $lon = Auth::user()->lon;

 $users = DB::table('users')
 ->select(DB::raw("id, ASIN(SQRT( POWER(SIN(($lat 
- abs(lat))*pi()/180/2),2)+COS($lat*pi()/180 )*COS(abs(lat)*pi()/180)
 *POWER(SIN(($lon-lon)*pi()/180/2),2)))as distance))
->whereRaw("distance < $radius")
>paginate($this->takeResults);

Запрос работает и рассчитывает все расстояния. Но тогда я не могу запросить эти расстояния. Потому что передача 'distance' для оператора whereRaw () не переносится?

Я получаю

Unknown column 'distance' in 'where clause' 

Кто-нибудь знает, как я могу сделать это иначе?

Во всех остальных ответах говорится, что вместо того, чтобы ГДЕ попытаться ИМЕТЬ, потому что это проблема MYSQL. Но когда я пробую laravels withRaw (), он все равно не работает?

1 Ответ

1 голос
/ 21 мая 2019

Вы можете попробовать использовать havingRaw()

$lat = Auth::user()->lat;
$lon = Auth::user()->lon;

$users = DB::table('users')
    ->select(DB::raw("id, ASIN(SQRT( POWER(SIN(($lat - abs(lat))*pi()/180/2),2)+COS($lat*pi()/180 )*COS(abs(lat)*pi()/180)*POWER(SIN(($lon-lon)*pi()/180/2),2)))as distance"))
    ->havingRaw("'distance' < $radius")
    ->paginate($this->takeResults);
...