简而言之:
“pages”和“tasks”具有由数据透视表“page_tasks”链接的多对多关系。表“响应”通过外键“page_task_id”链接到该数据透视表。
现在我希望能够直接使用Eloquent访问该页面和响应所属的任务。但是hasManyThrough函数不起作用,因为它会在不同的地方显示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();
}
然而,这告诉我没有称为“任务”的方法。
推荐的方法是什么?我做错了什么?
如果需要,可以提供以下详细信息:
“pages”和“tasks”与枢轴表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');
}
}
这很好用。
Response-Model看起来像这样
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');
}
}