繁体   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