我正在使用laravel的查询构建器从我的数据库中获取位置。我需要加入2个表,然后按位置查询结果。在我添加连接之前,一切正常。
如果我这样做
$locations = DB::table('locations')
->join('charities', 'locations.charity', '=', 'charities.charity')
->when($charity, function ($query) use ($charity) {
return $query->where('charity', '=', $charity);
})
->get();
然后它返回我需要的两个表的内容。如果我做
$locations = DB::table('locations')
->select('locations.*')
->selectRaw('( 3959 * acos( cos( radians(?) ) *
cos( radians( latitude ) )
* cos( radians( longitude ) - radians(?)
) + sin( radians(?) ) *
sin( radians( latitude ) ) )
) AS distance', [$lat, $lng, $lat])
->havingRaw("distance < ?", [$max_distance])
->when($charity, function ($query) use ($charity) {
return $query->where('charity', '=', $charity);
})
->get();
然后我得到位置表的内容,过滤器工作正常。
我将两者放在一起,它只返回没有错误的位置内容,并且没有加入慈善表。
$locations = DB::table('locations')
->join('charities', 'locations.charity', '=', 'charities.charity')
->select('locations.*')
->selectRaw('( 3959 * acos( cos( radians(?) ) *
cos( radians( latitude ) )
* cos( radians( longitude ) - radians(?)
) + sin( radians(?) ) *
sin( radians( latitude ) ) )
) AS distance', [$lat, $lng, $lat])
->havingRaw("distance < ?", [$max_distance])
->when($charity, function ($query) use ($charity) {
return $query->where('charity', '=', $charity);
})
->get();
答案 0 :(得分:0)
在MosCH评论之后我得到了它的工作,非常简单的修复,如果其他人有这个问题,请参阅下面的代码。您会注意到我在where子句中指定了locations.charity因为慈善机构是我加入的,我猜它是冲突的。
$locations = DB::table('locations')
->join('charities', 'locations.charity', '=', 'charities.charity')
->select('*')
->selectRaw('( 3959 * acos( cos( radians(?) ) *
cos( radians( latitude ) )
* cos( radians( longitude ) - radians(?)
) + sin( radians(?) ) *
sin( radians( latitude ) ) )
) AS distance', [$lat, $lng, $lat])
->havingRaw("distance < ?", [$max_distance])
->when($charity, function ($query) use ($charity) {
return $query->where('locations.charity', '=', $charity);
})
->get();