Получить результаты модели Laravel на основе нескольких идентификаторов и первой таблицы изображений hasMany

Я реализовал найти места с помощью MySQL запрос, чтобы найти ближайший список на моих картах Google, используя Laravel 5.

$query = DB::select(DB::raw('SELECT id, ( 3959 * acos( cos( radians(' . $lat . ') ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians(' . $lng . ') ) + sin( radians(' . $lat .') ) * sin( radians(latitude) ) ) ) AS distance FROM listings HAVING distance < ' . $distance . ' ORDER BY distance') );
$ids = [];

foreach($query as $q)
{
array_push($ids, $q->id);

}

он возвращает несколько идентификаторов, которые затем я могу получить список, используя whereIn

$results = Listing::whereIn('id', $ids)->paginate(15);

Теперь проблема в том, что в каждом списке много изображений на разных таблицах (таблица изображений), я хочу получить первое изображение только затем, затем передать результаты для просмотра (перечислить все списки с одним изображением)

Что бы правильно решить эту проблему?

Спасибо!

1

Решение

Я полагаю, что вы хотите получить:

$listing = Listing::whereIn('id', $ids)->first();

где $listing это первая запись.

0

Другие решения

Это называется «выбрать по группе» и является чем-то вроде взлома. MySQL нарушает спецификацию SQL в том, как он это делает, и вы должны знать, что, если вы намерены быть независимыми от базы данных, вы сами выберете группу для себя.

Так, например, если у вас был класс ListingImage:

$listings = Listing::whereIn('id', $ids)->paginate(15);
$images   = ListingImage::whereIn('listing_id', $ids)->groupBy('listing_id')->get();

(В качестве стороны, вы можете использовать $query->pluck('id') чтобы получить коллекцию без использования этого цикла.)

0

По вопросам рекламы [email protected]