左连接的Laravel原始查询

时间:2017-04-17 23:04:47

标签: php mysql laravel eloquent

我正在创建一个使用 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降序显示它们。

如果有人能提出最好的方法,我会感激不尽。

0 个答案:

没有答案