chelkaz
@chelkaz

Laravel. Как объединить запрос в модель?

Есть запрос модели:
$lat = (float) 55;
$lng = (float) 37;
$city = $lat.','$lng
$locations = Locality::where('point', $city)
            ->with('rating_results')
            ->firstOrFail();

И в этой модели нужно тут же сделать еще один запрос:
$nearest = \DB::table('localities')->select(\DB::raw("*,
                            (6371 * ACOS(COS(RADIANS($lat))
                                * COS(RADIANS(latitude))
                                * COS(RADIANS($lng) - RADIANS(longitude))
                                + SIN(RADIANS($lat))
                                * SIN(RADIANS(latitude)))) AS distance")
    )->orderBy('distance', 'asc')->take(20)->get();


Как сделать это через один запрос?
  • Вопрос задан
  • 478 просмотров
Пригласить эксперта
Ответы на вопрос 1
@assets
Back-end developer
Вопрос задан некорректно. Вы хотите объединить первый запрос вторым? Если так, ваш первый запрос возвращает только одну колонку.

Примерно так
$lat = (float) 55;
$lng = (float) 37;
$city = $lat.','$lng;

$nearest = \DB::table('localities')
	->where('point', $city)
         // join поправь под структуру таблицы.
	->join('rating_results','localities.id','rating_results.local_id')
	->select(\DB::raw("*,
	                            (6371 * ACOS(COS(RADIANS($lat))
	                                * COS(RADIANS(latitude))
	                                * COS(RADIANS($lng) - RADIANS(longitude))
	                                + SIN(RADIANS($lat))
	                                * SIN(RADIANS(latitude)))) AS distance")
	    )
	->orderBy('distance', 'asc')->take(20)->get();
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы