はじめに#
Laravelでリレーションはちょっと特殊な書き方をします。備忘録として残しておきます。
雑多なメモ書きという感じですがご容赦ください。
Laravelでリレーション#
Laravelのリレーションはモデルに書くことで定義できます。
・1対1
・1対多
・多対多
この3パターンで書き方が異なってきます。
1対1#
例えば、ケータイは基本的に一人につき一つです。(複数台持ちはここでは無視してください。)
まずはテーブルを作ります。
phoneテーブルには外部キーであるuser_idを持たせています。そしてモデルで下記のように定義します。
User.php
public function phone(){
return $this->hasOne('App\Models\Phone');
}
Phone.php
public function user(){
return $this->belongsTo('App\Models\User');
}
これで1対1のリレーションをはることが出来ました。
1対多#
1対多の場合も基本的な考え方は変わりません。
例えば、SNSの投稿機能などでは、ユーザー一人につき投稿は複数あります。
まずはテーブルを作成します。
やはりpostsテーブルには外部キーであるuser_idが必要です。
モデルは下記のようになります。
User.php
public function posts(){
return $this->hasMany('App\Models\Post');
}
Post.php
public function user(){
return $this->belongsTo('App\Models\User');
}
このように書きます。
終わりに#
これで、userを取得してそれぞれで定義したメソッドを使えばリレーション関係にあるphoneやpostsを引っ張ってくることが出来ます。
多対多はまた少し違うので今回は割愛します。←