gpt4 book ai didi

mysql - 在其他表中选择坐标

转载 作者:行者123 更新时间:2023-11-30 21:54:55 25 4
gpt4 key购买 nike

我想获取所有最近的项目,坐标保存在列表表中。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]: Column not found: 1054 Unknown column 'listings.latitude' in 'field list'

如果从低到高排序

Column not found: 1054 Unknown column 'listings.id' in 'group statement'

如何访问/选择这两种类型的坐标和列表?

最佳答案

您的 Items 是 Item 的集合而不是模型,因此您不能对该对象执行 distance 方法。您必须使用 foreach 并找到用户位置与每个项目之间的距离。

foreach($items as $item) {   
$distance=$item->distance($userPosition);
}

现在在 distance 方法中,您将计算用户位置和 Item 之间的距离。

其次将 $items->groupBy('listings.id') 更改为 $items->groupBy('listing_id') 其中 listing_iditems 表中的字段

关于mysql - 在其他表中选择坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45604577/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com