使用商店地理定位的产品搜索
Product Search using geolocation of shops
我是 Laravel 的新手,我正在尝试使用附近的商店搜索产品
这是我的代码
Shop::selectRaw(" id ,
( 6371 * acos( cos( radians(?) ) *
cos( radians( lat ) )
* cos( radians( lng ) - radians(?)
) + sin( radians(?) ) *
sin( radians( lat ) ) )
) AS distance", [$latitude, $longitude, $latitude])
->having("distance", "<", $radius)
->orderBy("distance",'asc')->products()->where('name', 'LIKE', '%' . $keyword . '%')->get();
但我收到此错误消息:
"message": "Call to undefined method
Illuminate\Database\Eloquent\Builder::products()"
注意:商店和产品之间的关系在我的其他功能中起作用
我真的很困惑,为什么在 orderBy
和所有其他子句之后使用 products()
?
如果你想从商店获取 products
,你不必做 products()
,你必须使用 Product::....
,但如果你想获取相关的商店要 products
,您必须使用 whereHas('products', ....)
,阅读更多相关信息 here。
你的代码应该是这样的:
$shops = Shop::selectRaw(
"id, (6371 * acos(
cos(radians(?)) * cos(radians(lat)) * cos(radians(lng) - radians(?)) + sin(radians(?)) * sin(radians(lat))
)) AS distance",
[$latitude, $longitude, $latitude])
->having("distance", "<", $radius)
->orderBy("distance",'asc')
->whereHas('products', function ($query) use ($keyword) {
return $query->where('name', 'LIKE', '%' . $keyword . '%');
})
->with('products')
->get();
该代码会给你商店,你可以做$shops->products
。
但是如果你想直接得到products
你必须使用Product
模型:
$products = Product::where('name', 'LIKE', '%' . $keyword . '%')
->whereHas('shops', function ($query) use ($latitude, $longitude, $latitude, $radius) {
return $query->selectRaw(
"id, (6371 * acos(
cos(radians(?)) * cos(radians(lat)) * cos(radians(lng) - radians(?)) + sin(radians(?)) * sin(radians(lat))
)) AS distance",
[$latitude, $longitude, $latitude]
)
->having("distance", "<", $radius)
->orderBy("distance",'asc');
})
->get();
我是 Laravel 的新手,我正在尝试使用附近的商店搜索产品 这是我的代码
Shop::selectRaw(" id ,
( 6371 * acos( cos( radians(?) ) *
cos( radians( lat ) )
* cos( radians( lng ) - radians(?)
) + sin( radians(?) ) *
sin( radians( lat ) ) )
) AS distance", [$latitude, $longitude, $latitude])
->having("distance", "<", $radius)
->orderBy("distance",'asc')->products()->where('name', 'LIKE', '%' . $keyword . '%')->get();
但我收到此错误消息:
"message": "Call to undefined method Illuminate\Database\Eloquent\Builder::products()"
注意:商店和产品之间的关系在我的其他功能中起作用
我真的很困惑,为什么在 orderBy
和所有其他子句之后使用 products()
?
如果你想从商店获取 products
,你不必做 products()
,你必须使用 Product::....
,但如果你想获取相关的商店要 products
,您必须使用 whereHas('products', ....)
,阅读更多相关信息 here。
你的代码应该是这样的:
$shops = Shop::selectRaw(
"id, (6371 * acos(
cos(radians(?)) * cos(radians(lat)) * cos(radians(lng) - radians(?)) + sin(radians(?)) * sin(radians(lat))
)) AS distance",
[$latitude, $longitude, $latitude])
->having("distance", "<", $radius)
->orderBy("distance",'asc')
->whereHas('products', function ($query) use ($keyword) {
return $query->where('name', 'LIKE', '%' . $keyword . '%');
})
->with('products')
->get();
该代码会给你商店,你可以做$shops->products
。
但是如果你想直接得到products
你必须使用Product
模型:
$products = Product::where('name', 'LIKE', '%' . $keyword . '%')
->whereHas('shops', function ($query) use ($latitude, $longitude, $latitude, $radius) {
return $query->selectRaw(
"id, (6371 * acos(
cos(radians(?)) * cos(radians(lat)) * cos(radians(lng) - radians(?)) + sin(radians(?)) * sin(radians(lat))
)) AS distance",
[$latitude, $longitude, $latitude]
)
->having("distance", "<", $radius)
->orderBy("distance",'asc');
})
->get();