2016-05-01 7 views
1

Я выполнил finding locations with mysql запрос, чтобы найти ближайший листинг на моих картах Google с помощью Laravel 5.Получить результаты Laravel модели, основанные на нескольких идентификаторов и первого hasMany изображений таблицы

$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); 

    } 

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

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

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

Какой правильный способ решить эту проблему?

Спасибо!

ответ

0

Я supose, что вы хотите получить:

$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'), чтобы получить коллекцию без использования этого цикла.)