简短的问题:
“pages”和“tasks”具有由数据透视表“page_tasks”链接的多对多关系。表“responses”通过外键“page_task_id”链接到该数据透视表。
现在我希望能够直接使用 Eloquent 访问页面和响应所属的任务。但是 hasManyThrough 函数不起作用,因为它在不同的地方 exspects foreign_keys:
public function task(){
return $this->hasManyThrough('PageTask', 'Task', 'page_task_id', 'task_id');
}
“字段列表”中的未知列“tasks.page_task_id”
这意味着 eloquent 期望任务表具有指向 page_tasks 的外键 page_task_id。但在我的模型中,page_tasks 表有一个指向任务的外键 task_id。我如何雄辩地讲述这个事实?
我尝试的另一种方法是使用先前定义的现有关系:
public function task(){
return $this->page_task->task();
}
然而,这告诉我没有称为“任务”的方法。
实现这一目标的推荐方法是什么?我究竟做错了什么?
如果需要,这里有一些详细信息:
“页面”和“任务”与链接它的数据透视表 page_tasks 具有多对多关系。
页面模型:
class Page extends Model {
public function tasks(){
return $this->belongsToMany('Task', 'page_tasks');
}
}
任务模型:
class Task extends Model {
public function pages()
{
return $this->belongsToMany('Page', 'page_tasks');
}
}
这工作正常。
响应模型看起来像这样
class Response extends Model {
protected $fillable = [
'page_task_id',
];
public function page_task(){
return $this->belongsTo('App\PageTask', 'page_tasks');
}
public function task(){
??????
}
}
PageTask-Model 看起来像这样:
class PageTask extends Model {
protected $fillable = [
'page_id',
'task_id',
];
public function page(){
return $this->belongsTo('Page');
}
public function task(){
return $this->belongsTo('Task');
}
public function responses(){
return $this->hasMany('Response');
}
}