【发布时间】:2018-01-18 03:55:51
【问题描述】:
我想获取所有最近的项目,坐标保存在列表表中。 items和listing是多对多的关系。 然后它将按距离或从低到高的价格排序。
$items = Item::with('listings')
->select('*');
if($request->sortby == 'distance'){
$items->distance($lat,$lng);
}
if($request->sortby == 'low'){
$items->groupBy('listings.id')
->orderBy('items.price');
}
$items = $items->paginate(10);
这是我的距离项目模型
public function scopeDistance($query, $lat, $lng) {
return $query->addSelect(DB::Raw('(3959 * acos( cos( radians(' . $lat . ') ) * cos( radians( listings.latitude ) ) * cos( radians( listings.longitude ) - radians(' . $lng . ') ) + sin( radians(' . $lat .') ) * sin( radians(listings.latitude) ) ) ) AS distance'))
->orderBy('distance');
}
这需要 Listings.latitude 和 Listings.longitude 保存在列表表中。 错误是
SQLSTATE[42S22]:未找到列:1054 未知列 '字段列表'中的'listings.latitude'
如果从低到高排序
未找到列:1054 未知列 'listings.id' in 'group 声明'
如何访问/选择这两种类型的坐标和列表?
【问题讨论】:
-
group by 对我来说似乎不正确,因为并非选择中的所有字段在功能上都依赖于它的值。
-
但我认为真正的问题是
with在后台使用了 2 个单独的查询,而不是一个带有连接的查询。
标签: mysql laravel laravel-5 eloquent eager-loading