嗨,我寫了這段代碼,它作業得很好,但我認為這不是最好的方法!
我想獲得 1 家公司的所有作業。
每個公司可以有很多地址,每個地址可以有很多作業
這是我的代碼:
$company = Company::find($id)->with('addresses.jobDetails.job')->first();
$jobs = [];
foreach ($company->addresses as $address) {
foreach ($address->jobDetails as $detail) {
array_push($jobs, [
'id' => $detail->job->id,
'title' => $detail->job->title,
'country' => $detail->job->country,
'city' => $detail->job->city,
'type' => $detail->job->type,
'work_types' => JobType::where('job_id',$detail->job->id)->pluck('title'),
'income' => $detail->income,
]);
}
}
return $jobs;
誰能幫我把它改成更好的代碼
先感謝您
uj5u.com熱心網友回復:
你做相反的事情,從 JobDetails 開始
$jobDetails = JobDetail::whereHas('address.company', function($compabyQuery) use($id) {
$companyQuery->where('id', $id);
})->with('jobs')->get();
foreach ($jobDetails as $detail) {
array_push($jobs, [
'id' => $detail->job->id,
'title' => $detail->job->title,
'country' => $detail->job->country,
'city' => $detail->job->city,
'type' => $detail->job->type,
'work_types' => JobType::where('job_id',$detail->job->id)->pluck('title'),
'income' => $detail->income,
]);
}
return $jobs;
編輯:
在您的查詢中
Company::find($id)->with('addresses.jobDetails.job')->first();
您使用急切加載運行 4 個查詢。每個模型一個。您可以檢查結果是否所有資料都存在于變數中$company。
我給你的例子它只運行兩個查詢,第一個(job_details)將使用連接來過濾id公司表的作業結果(你可以使用地址表中的欄位使其更快company_id)第二個是對于使用急切加載的作業關系。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/436660.html
