ホーム > Laravel > Laravelで多対1のリレーションをして保存、表示する方法。1対多のときの逆【belongsTo】
Laravel

Laravelで多対1のリレーションをして保存、表示する方法。1対多のときの逆【belongsTo】

いつもご利用ありがとうございます。
この記事には広告が掲載されており、その広告費によって運営しています。

⇨ Laravel 記事の目次はこちら

Laravel で多対1のリレーションをして保存、表示する方法について書いていきます。

多対1という表現は使われてるのをみたことないですが、個人的に分けた方が最初は分かりやすいと思っているので、別々の記事として書いています。

前回の記事、1対多 hasMany はこちら

Laravel で1対多のリレーションをして保存、表示する方法【hasMany】

基本的に今回の記事も、前回の記事も、

公式ドキュメントの要約となります

検証環境

Laravel 6

リレーションしたデータを取り出す

今回は、前回とは反対方向のデータを取得する方法となります。

前回は user⇨posts という方向でしたが、今回は、

posts⇨user という方向になります(多対1)

モデルに書く

モデルの Post.php を修正します。

class Post extends Model
{
    public function user()
    {
       return $this->belongsTo('App\User');
    }
}

belongsTo という、見慣れない英語を使います(いまだに見慣れない)

コントローラーには、

use App\Post;

~~~~~~~~
    public function index()
    {
        $posts = Post::with('user')->get();
        //dd($posts);
        return view('home');
    }

これで OK です。with('モデルで定義した関数名')をして Eager ロードします。

表示(views)

@foreach($posts as $post)
  {{ $post->title }}
  {{ $post->user->name }}
@endforeach

このようにすれば、タイトルと、ユーザーネームを簡単に一覧として表示することができますね。

まとめ

いかがだったでしょうか?

以上がリレーションについて、僕なりにわかりやすくまとめた記事となります。

基本的に多対1という表現はしなくて、1対多のときに belongsTo も一緒に定義してしまう記事ばかりだと思いますが、ややこしいと思うのであえて分けてみました。

んー。

果たしてこの分けたことで混乱してないかどうか・・・。慣れれば問題ないんですが、自分も1年半前に Laravel を触ってよくわからんかったところなので分けてみたんですが・・・。

感想や誤字などありましたら、TwitterDM からご連絡お願いします。

関連記事

Laravel で1対多のリレーションをして保存、表示する方法【hasMany】

Laravel で1対1のリレーションをする方法。【hasOne】

Laravel で多対多のリレーションをして保存、表示する方法【belongsToMany】

人気記事

PHP7.4 + Laravel6 のプロジェクトを AWS EC2 にデプロイする