本文介绍了选择其他表的坐标的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想获取所有最近的物品,坐标保存在清单表中.物品和物品有多对多的关系.然后将按距离或从低到高的价格对其进行排序.

I want to get all nearest items, the coordinates are saved at listings table.items and listings are many to many relationship.Then it will be sorted either by distance or low to high price.

 $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保存在listings表中.错误是

this requires listings.latitude and listings.longitude which are saved in listings table.The error is

如果价格从低到高排序

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

how to access/select coordinates and listings for these two sorts?

推荐答案

您可以在此处使用join而不是急于加载.

You may use join instead of eager loading here.

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

然后在这里使用您的逻辑.

Then use your logic here.

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

这篇关于选择其他表的坐标的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-11 08:33