Laravel 8 モデルのリレーションシップが反映されない

Laravelのいいところは、モデルを定義しておいて、リレーション関係を明示しておくとSQLを書かなくてもテーブル結合したデータが持ってくることができるところ。

非常に便利な機能ですが、SQLの基礎や生のwebアプリケーションのform,submit,HttpRequest,HttpResponseといった根幹を理解しないと、言語やフレームワークが変わったときに対応できないのでは…と思うおじさんの意見です。

そんなモデルのリレーション機能ですが、Laravel8だと書き方が変わっているようです。

以前までの書き方が下記。モデル名のパスをテキストで指定します。(以前のバージョンの場合、ModelというディレクトリもなくApp直下なのですが)

    public function board()
    {
        return $this->hasOne('App\Models\Board');
        
    }

動かん。

ということで調べてみました。

解決策

下記を参考にさせていただきました。やはり困ったときは公式サイト。

アクション構文を使用する

Laravel8はやはり書き方を変えないといけないみたいです。

    public function board()
    {
        //return $this->hasOne('App\Models\Board',"person_id");
        return $this->hasOne(Board::class);
    }

やっぱりこの書き方。クラスを引数にします。

根幹部分はあまり変えないでほしいです。

タイトルとURLをコピーしました