1

要するに質問:

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

0 に答える 0