我正在创建一个使用 Laravel 的应用程序来按地理位置搜索商家。我有两个模型,我的雄辩查询需要查看:商家和订阅。一个企业可以有很多订阅(通常一次只有一个订阅),订阅模型包含一个end_date
,我希望将其包含在我的结果中并按它排序(DESC)。
我已经在我的商业模式中构建了地理位置搜索查询范围:
public function scopeDistance($query,$from_latitude,$from_longitude,$distance)
{
$raw = \DB::raw('ROUND ( ( 3959 * acos( cos( radians('.$from_latitude.') ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians('.$from_longitude.') ) + sin( radians('.$from_latitude.') ) * sin( radians( latitude ) ) ) ), 1 ) AS distance');
return $query->select('*')->addSelect($raw)->orderBy( 'distance', 'ASC' )->groupBy('distance', 'id')->having('distance', '<=', $distance);
}
我尝试将其与左连接合并到相关订阅中:
$businesses = Business::distance($place['lat'], $place['lng'], $request->distance)
->leftJoin('premium_subscriptions', function($join) {
$join->on('businesses.id', '=', 'premium_subscriptions.business_id');
})
但是我收到以下错误:
SQLSTATE [23000]:完整性约束违规:1052列&#39; id&#39;在 小组陈述含糊不清
我想要实现的是在我的地理位置参数中返回的商家列表,但也检索该商家的最新订阅(如果有的话,按最新的end_date值)并在我返回的结果中包含subscription.end_date
按最低end_date
降序显示它们。
如果有人能提出最好的方法,我会感激不尽。