Laravelで多対1のリレーションをして保存、表示する方法。1対多のときの逆【belongsTo】
いつもご利用ありがとうございます。
この記事には広告が掲載されており、その広告費によって運営しています。
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】
人気記事