选择其他表格的坐标

时间:2017-08-10 04:36:58

标签: mysql laravel laravel-5 eloquent eager-loading

我想获取所有最近的项目,坐标保存在列表表格中。 项目和列表是多对多的关系。 然后它将按距离或从低到高的价格进行分类。

 $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');
    }

这需要listing.latitude和listings.longitude保存在列表表格中。 错误是

  

SQLSTATE [42S22]:找不到列:1054未知列   ' listings.latitude'在'字段列表'

如果从低价到高价分类

  

未找到列:1054未知列' listings.id'在'组   语句'

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

2 个答案:

答案 0 :(得分:0)

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

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

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

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

答案 1 :(得分:0)

您可以在此处使用加入而不是急切加载。

$items = Item::join('listings','listings.item_id','=','items.id')
               ->select('*');

然后在这里使用你的逻辑。

if($request->sortby == 'distance'){
        $items->distance($lat,$lng);
      }
if($request->sortby == 'low'){
        $items->groupBy('listings.id')
              ->orderBy('items.price');
      }
$items = $items->paginate(10);