要するに質問:
「pages」と「tasks」は、ピボットテーブル「page_tasks」によってリンクされた多対多の関係にあります。テーブル "responses" は、外部キー "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');
}
}
これはうまくいきます。
応答モデルは次のようになります
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');
}
}