Eloquent / Laravel5连接遥远的关系(“hasOneThrough”)

时间:2015-08-05 10:36:48

标签: laravel-5 eloquent pivot-table has-one-through

简而言之:

“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');
    }
}

0 个答案:

没有答案