[英]Laravel Eloquent hasOne returns empty
我有兩個名為'works'和'slides'的表以及兩個擴展Eloquent的名為'Work'和'Slide'的類。 在我的“作品”表格中,我有一個'id'列,一個'標題'列,一個'描述'列和一個'圖像'列,在我的'幻燈片'表中,我有一個使用帶有兩列的外鍵的復合鍵命名為'id'和'work_id'。
這就是我的數據庫關系的樣子:
這是我的Slide類的代碼:
class Slide extends Eloquent {
public $timestamps = false;
public function workId() {
return $this->hasOne('work', 'work_id', 'id');
}
}
這是我的Work類的代碼:
class Work extends Eloquent {
public $timestamps = false;
}
在我的索引頁面中,我試圖通過調用我的Slide對象中的'workId()'方法獲取一個Work對象,但是它返回為空以及此代碼:
$slides = Slide::all();
$works = new \Illuminate\Database\Eloquent\Collection;
foreach ($slides as $slide) {
$works->push($slide->workId());
}
printf($works);
但是,如果我用'$ slide-> workId()'調用替換:
Work::find($slide->work_id)
然后它找到沒有問題的行。
我該怎么做才能讓函數返回Work對象而不是調用Work :: find()?
Slide屬於Work,因為要工作的外鍵位於slide表中。 您還使用了關系函數的錯誤命名和hasOne的錯誤語法。
你需要使用:
class Slide extends Eloquent {
public $timestamps = false;
public function work() {
return $this->belongsTo('Work');
//or return $this->belongsTo('Work', 'work_id', 'id');
}
}
獲取屬於幻燈片的作品: $slide->work
注意:您對belongsTo使用“ association() ”,而不是“push()”
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.