我遇到了 Laravel BelongsTo 關系的問題。
我想遍歷一組廚師并從他們那里得到飯菜。
我像這樣創建廚師集合:
$cooks = Cook::has('meals')->get();
然后我想在 foreach 回圈中得到這樣的飯菜:
foreach($cooks as $cook){
$meals = $cook->meals()->get()
}
但是餐點卡在以下功能上:
public function getCookNameAttribute()
{
return $this->cook->userProfile->firstname . ' ' . $this->cook->userProfile->lastname;
}
我收到廚師為空的錯誤,但如果查詢是從廚師運行的,那怎么可能呢?
關系如下所示:
public function cook(): BelongsTo
{
return $this->belongsTo(Cook::class);
}
uj5u.com熱心網友回復:
您是否嘗試過使用外鍵和所有者鍵?
public function cook()
{
return $this->belongsTo(Cook::class, 'cook_id', 'id');
}
雄辯的一對一關系
uj5u.com熱心網友回復:
就像你現在做的那樣
$meals = $cook->meals()->get();
您將回傳一個集合,其中僅包含屬于廚師的餐點,而不是廚師,這就是廚師在您的函式中為空的原因。
您需要在第一個 ->get() 函式中添加 ->with('cook') ,但通常我不建議在回圈中使用資料庫查詢。否則你可以做
return $this->cook()->get()->userProfile->firstname . ' ' . $this->cook()->get()->userProfile->lastname;
但是每次查找名字和姓氏時都會執行查詢。
也許可以在一個查詢中讓廚師們用餐,然后遍歷結果:
$cooks = Cook::with('meals')->get();
echo($cooks);
看看你得到的結果并遍歷它們以獲得廚師的名字和他們各自的飯菜?
uj5u.com熱心網友回復:
使用急切加載:急切加載
$cooks = Cook::with("meals.cook.userProfile")
->has('meals')
->get();
foreach($cooks as $cook){
$meals = $cook->meals;
}
然后將您的模型訪問器更改為:
public function getCookNameAttribute()
{
return trim(
($this->cook?->userProfile?->firstname ?? '')
. ' '
. ($this->cook?->userProfile?->lastname ?? '')
);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/518275.html
