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