基于多个ID和第一个hasMany图像表检索Laravel模型结果

时间:2016-05-01 19:35:26

标签: php mysql laravel eloquent has-many

我已使用laravel 5实施了finding locations with mysql查询,以便在我的Google地图上找到最近的列表。

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

    }

它返回多个id,然后我可以使用whereIn

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

现在的问题是,每个列表在不同的表(图像表)上有很多图像,我想只检索第一个图像然后将结果传递给视图(列出所有列表中有1个图像)

解决这个问题的正确方法是什么?

谢谢!

2 个答案:

答案 0 :(得分:0)

我想说你想得到:

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

其中$listing是第一个条目。

答案 1 :(得分:0)

这称为“按组选择”,有点像黑客。 MySQL在如何做到这一点上打破了SQL规范,你应该知道,如果你打算与数据库无关,那么你将会引起很多选择的悲痛。

因此,例如,如果你有班级ListingImage

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

(作为一方,您可以使用$query->pluck('id')来获取集合而不使用该循环。)