Запрос, который JOINs 2 модели ON

Я использую Laravel 5 и имею 2 модели location и chauffeur с отношениями

public function chauffeurs() { return $this->hasMany('App\Chauffeur'); }

а также

public function location() { return $this->hasOne('App\Location', 'id', 'location_id'); }

Это запрос, который у меня есть, который работает

"SELECT *, 
                    (6371 * acos(cos(radians(".$latitude.")) * cos(radians(latitude)) * cos(radians(longitude) - radians(".$longitude.")) + sin(radians(" . $latitude.")) * sin(radians(latitude)))) AS distance 
                    FROM `locations` AS l
                    JOIN `chauffeurs` AS c
                    ON (l.id = c.location_id)
                    HAVING distance < c.radius
                    ORDER BY distance ";

Это то, что у меня есть до сих пор

Chauffeur::select('*, (6371 * acos(cos(radians(1.492659)) * cos(radians(latitude)) * cos(radians(longitude) - radians(103.7413591)) + sin(radians(1.492659)) * sin(radians(latitude)))) AS distance ')
    ->join('Location', '`location`.`id`', '=', '`chauffeur`.`location_id`')
    ->havingRaw('distance < `chauffeur`.`radius`')
    ->get();

и я получаю эту ошибку

`Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '.`492659)) * sin(radians(latitude))))` as `distance ` from `locations` inner joi'`

Как бы я использовал модели laravel для выполнения того же запроса? Любая идея, что я делаю неправильно или есть ли лучший способ? Спасибо

Не используйте эту обратную кавычку в имени таблицы и именах столбцов.

Elias Soares 12.06.2019 12:53
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
1
19
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

использовать DB::raw(); с запросом выбора

Другие вопросы по теме