Я хочу получить велосипеды, чье последнее (последнее добавленное) связанное местоположение находится в определенной области.Это должно быть сделано с использованием объема запроса scopeBounding($query, $latNorth, $lonEast, $latSouth, $lonWest)
на модели велосипеда.У каждого велосипеда есть много мест:
public function locations()
{
return $this->hasMany(Location::class);
}
То, что у меня есть до сих пор, похоже, не работает вообще, так как я не знаю, как проверять только последние из связанных мест.
public function scopeBounding($query, $latNorth, $lonEast, $latSouth, $lonWest)
{
return $query->whereHas('locations', function ($q) use ($latNorth, $lonEast, $latSouth, $lonWest)
{
$q->whereBetween('latitude', [$latNorth, $latSouth])
->whereBetween('longitude', [$lonWest, $lonEast]);
});
}
Возвращенные велосипеды имеют последние местоположения, которые не соответствуют условию whereBetween
.
Выбор местоположения, а не связанных с ним велосипедов, однако работает как ожидалось:
App\Location::whereBetween('latitude', [50, 50.2])->whereBetween('longitude', [11, 12])->get();
ОБНОВЛЕНИЕ:
Модель местоположения имеет поля долготы и широты:
$table->decimal('latitude', 8, 6);
$table->decimal('longitude', 9, 6);
Область используется следующим образом:
$bounding_bikes = Bike::bounding($latNorth, $lonEast, $latSouth, $lonWest)->get();
аналогичный вопрос