Я новичок в laravel.
Я использую этот контроллер, чтобы найти все местоположения в виде карты с sw и ne, которые хорошо работали, когда sw и ne - положительный десятичный знак, но когда sw и ne - Отрицательный queryBuilder ничего не возвращает. Когда запрос выполняется в mysql, возвращается правильный результат.
Может кто-нибудь помочь мне выяснить, что я делаю неправильно. Это мой код:
$lat_a = (float)\request('sw_lat');
$lat_b = (float)\request('ne_lat');
$lng_a = (float)\request('sw_lng');
$lng_b = (float)\request('ne_lng');
$data = Location::where(function ($q) use ($lat_a, $lat_b) {
$q->WhereRaw('(?<? AND location_lat>=? AND location_lat<=?)', [$lat_a, $lat_b, $lat_a, $lat_b])
->orWhereRaw('(?<? AND location_lat>=? AND location_lat<=?)', [$lat_b, $lat_a, $lat_b, $lat_a]);
})->where(function ($q) use ($lng_a, $lng_b) {
$q->WhereRaw('(?<? AND location_lng>=? AND location_lng<=?)', [$lng_a, $lng_b, $lng_a, $lng_b])
->orWhereRaw('(?<? AND location_lng>=? AND location_lng<=?)', [$lng_b, $lng_a, $lng_b, $lng_a]);
})->get();
и структура моей таблицы:
$table->decimal(\App\Location::COLUMN_LOCATION_LAT,10,8);
$table->decimal(\App\Location::COLUMN_LOCATION_LNG,11,8);
и журнал запросов
rray:1 [
0 => array:3 [
"query" => "select * from `locations` where ((?<? AND location_lat>=? AND location_lat<=?) or (?<? AND location_lat>=? AND location_lat<=?)) and ((?<? AND location_lng>=? AND location_lng<=?) or (?<? AND location_lng>=? AND location_lng<=?)) and `locations`.`deleted_at` is null"
"bindings" => array:16 [
0 => 41.84487754
1 => 41.91938078
2 => 41.84487754
3 => 41.91938078
4 => 41.91938078
5 => 41.84487754
6 => 41.91938078
7 => 41.84487754
8 => -87.67727337
9 => -87.59382214
10 => -87.67727337
11 => -87.59382214
12 => -87.59382214
13 => -87.67727337
14 => -87.59382214
15 => -87.67727337
]
"time" => 844.8
]
]