簡體   English   中英

Laravel Eloquent hasOne返回空

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM