Я столкнулся со странной проблемой, которая у меня возникла, и она действительно поставила меня в тупик. Я использую Laravel для создания своего веб-сайта, и я только что написал сценарий, который будет действовать как поисковая система. Он построен, а затем запустить.
Я просто управляю $query->get()
с $query
быть классом строителей Laravel. Это содержание запроса:
select * from (
select `l`.*, round(
d.distance_unit
* DEGREES(ACOS(COS(RADIANS(p.latitude))
* COS(RADIANS(z.latitude))
* COS(RADIANS(p.longitude - z.longitude))
+ SIN(RADIANS(p.latitude))
* SIN(RADIANS(z.latitude)))),
2
) AS distance, `d`.`radius` from `listings` as `l`
inner join `horses` as `x` on `x`.`id` = `l`.`listing_id`
inner join `suburbs` as `z` on `z`.`id` = `l`.`suburb_id`
inner join (select 50 as radius, 111.045 as distance_unit) as d on 1 = 1
inner join `suburbs` as `p` on `p`.`id` = 1
where (
`z`.`latitude` between
?
and
?
and `z`.`longitude` between
?
and
?
)
) as sub
where `distance` <= `radius`
order by `created_at` desc
limit 9 offset 0
Привязки запроса:
[bindings] => Array
(
[0] => Illuminate\Database\Query\Expression Object
(
[value:protected] => p.latitude - (d.radius / d.distance_unit)
)
[1] => Illuminate\Database\Query\Expression Object
(
[value:protected] => p.latitude + (d.radius / d.distance_unit)
)
[2] => Illuminate\Database\Query\Expression Object
(
[value:protected] => p.longitude - (d.radius / (d.distance_unit * COS(RADIANS(p.latitude))))
)
[3] => Illuminate\Database\Query\Expression Object
(
[value:protected] => p.longitude + (d.radius / (d.distance_unit * COS(RADIANS(p.latitude))))
)
)
Это запрос, который запускает laravel. Когда я печатаю sql. но я не могу на всю жизнь выяснить, почему он не возвращает значение, когда SQL, который я запускаю в phpmyadmin, делает. (Все, что я делаю, это добавляю привязки к знакам вопроса и запускаю в phpmyadmin). Я пришел к выводу, что PDO laravels должен делать что-то по-другому или присоединяться к ним по-другому. Я использую DB::raw()
метод для каждого из этих значений.
Мне удалось найти мою проблему, настроив my.ini
для сервера MySQL. Я повернулся general_log_file = "queries.log"
под [mysqld]
на. Потом работает SET global general_log = 1;
в MySQL.
Это показало мне проблему с моим запросом. Привязки вставлялись в кавычки, хотя я использовал DB::raw()
, Так что мне просто нужно найти способ их удалить.
Других решений пока нет …