Laravel 嵌套關係困境:解決複雜的資料檢索
在Laravel 中,橋接資料庫表之間複雜的關係通常具有挑戰性。考慮這樣的場景:您的目標是透過活動 ID 檢索活動的參與者。然而,由於事件-人物關係鏈中存在中間表,此任務變得複雜。
要解決此問題,必須仔細定義模型之間的關係。下面詳細闡述相關模型關係:
事件模型:
class Event extends Eloquent { public function city() { return $this->belongsTo('City'); } }
城市模型:
class City extends Eloquent { public function companies() { return $this->hasMany('Company'); } }
公司模型:
class Company extends Eloquent { public function persons() { return $this->hasMany('Person'); } }
人員模型:
class Person extends Eloquent { public function eventscore() { return $this->belongsToMany('Event', 'event_scores', 'person_id', 'event_id')->withPivot('score')->withTimestamps(); } }
定義了這些關係後,讓我們探討解決問題的兩次失敗嘗試:
return Event::with('city')->with('company')->get();
return Event::with('city')->whereHas('companies', function($query) use ($company_id){ $query->where('company_id', $company_id); })->get();
最終的解決方案在於利用eloquent 的即時載入功能:
return Event::with('city.companies.persons')->get();
此查詢檢索事件及其關聯的城市、公司和相關人員與這些公司合作。
或者,如果只需要人員表中的特定欄位:
return Event::with(['city.companies.persons' => function ($query) { $query->select('id', '...'); }])->get();
以上是如何在 Laravel 中有效地檢索具有嵌套關係的活動的與會者?的詳細內容。更多資訊請關注PHP中文網其他相關文章!