[英]Laravel get related columns with custom query
所以我有一個 function 來根據經度和緯度獲取范圍內的所有公司。 現在我想獲得與查詢相關的列,但我不知道如何。
這是我如何獲取該地區公司的代碼:
$companies = DB::table('companies')
->selectRaw("id, owner, company_info, address, latitude, longitude,
(6371 * acos( cos( radians(?))
* cos( radians(latitude) )
* cos( radians( longitude ) - radians(?))
+ sin( radians(?) )
* sin( radians(latitude)))) AS distance", [$requestedCords['latitude'], $requestedCords['longitude'], $requestedCords['latitude']])
->having("distance", "<=", $requestedCords['radius'])
->orderBy("distance",'asc')
->offset(0)
->limit(20)
->get();
在我的公司 model 中,我注意到我的關系是這樣的:
public function owner(){
return $this->belongsTo(User::class, 'owner', $this->primaryKey);
}
public function address(){
return $this->hasOne(Address::class, $this->primaryKey, 'address');
}
public function companyInfo(){
return $this->hasOne(CompanyInfo::class, $this->primaryKey, 'company_info');
}
這是我從上面的代碼中得到的響應:
{
"id": 2,
"owner": 1,
"company_info": 2,
"address": 1,
"latitude": 52.37304046,
"longitude": 5.244694307,
"distance": 0
},
這就是我想要的回應
{
"id": 23,
"owner": {
"id": 9,
"firstname": "kees",
"lastname": "piet",
"email": "piet@test.com",
"email_verified_at": null,
"phone": null,
"total_apmnt": 0,
"no_show": 0,
"total_shows": 0,
"last_time_payed": null,
"created_at": "2022-12-05T19:09:24.000000Z",
"updated_at": "2022-12-05T19:09:24.000000Z"
},
"company_info": {
"id": 6,
"name": "hetro",
"kvk": "2234",
"phone": 459594,
"type": "massage",
"created_at": "2022-12-05T18:45:31.000000Z",
"updated_at": "2022-12-05T18:45:31.000000Z"
},
"address": {
"id": 4,
"country": "nederland",
"state": "gebak",
"postalcode": "7741DN",
"street": "yummy",
"place": "yumyium",
"house_nmr": 143,
"nmr_addition": null
},
"latitude": 52.67007374,
"longitude": 6.735819476,
"created_at": "2022-12-05T19:09:40.000000Z",
"updated_at": "2022-12-05T19:09:40.000000Z"
}
這段代碼工作正常。 現在我希望owner
、 company_info
和address
返回與其相關的列/行。 但我真的不知道怎么辦。 我嘗試了很多不同的方式來添加->with('relation')
。 但我無法讓它工作。
我在 sql 方面也不是那么強,我對您如何在 laravel 中構建這些自定義查詢感到非常困惑。
或者有什么方法可以獲取相關模型並向其中添加 selectRaw 查詢?
提前致謝!
您需要使用 Eloquent model 而不是DB
facade 進行查詢。
$companies = Company::selectRaw("id, owner, company_info, address, latitude, longitude,
(6371 * acos( cos( radians(?))
* cos( radians(latitude) )
* cos( radians( longitude ) - radians(?))
+ sin( radians(?) )
* sin( radians(latitude)))) AS distance", [$requestedCords['latitude'], $requestedCords['longitude'], $requestedCords['latitude']])
->with(['owner', 'address', 'companyInfo'])
->having("distance", "<=", $requestedCords['radius'])
->orderBy("distance",'asc')
->offset(0)
->limit(20)
->get();
並且with
關系將正確連接,因為您已經在查詢中選擇了外鍵。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.