我已经使用mysql查询实现了查找位置,以使用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);
}
它返回多个id,然后我可以使用where在中检索列表
$results = Listing::whereIn('id', $ids)->paginate(15);
现在的问题是,每个列表在不同的表上都有许多图像(图像表),我只想检索第一个图像,然后将结果传递给视图(用1个图像列出所有列表)
解决这个问题的正确方法是什么?
谢谢!
我假设您想要获得:
$listing = Listing::whereIn('id', $ids)->first();
其中CCD_ 2是第一条目。
这被称为"按组选择",有点像黑客。MySQL在如何做到这一点上打破了SQL规范,您应该意识到,如果您打算成为数据库不可知论者,您将为自己按组选择带来很多痛苦。
例如,如果您有类ListingImage
:
$listings = Listing::whereIn('id', $ids)->paginate(15);
$images = ListingImage::whereIn('listing_id', $ids)->groupBy('listing_id')->get();
(作为一个方面,您可以使用$query->pluck('id')
来获得集合,而无需使用该循环。)