Laravel多対多について
多対多の概念や使い方が難しかったので、野球選手とポジションを例に考えてみる。
野球選手:ポジション
例えば、
選手目線
大谷は投手と外野の複数のポジションを守れる
ポジション目線
外野は大谷とイチロ-が守れる
このとき、野球選手とポジションは多対多の関係にあるといえる
この考えから下記のテーブルを作成する。
users(選手)目線
イチロー(1):外野(4)
大谷(2):投手(1)、外野(4)
阿部(3):捕手(2)、内野(3)
ポジション目線
投手(1):大谷(2)
捕手(2):阿部(3)
内野(3):阿部(3)
外野(4):イチロー(1)と大谷(2)
このとき、選手目線からみたポジションの情報がほしいときは下記のModelを作成する
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Member extends Model
{
public function potisions()
{
// 第2,3,4引数は省略できる
// 実際は第2:users_positions 第3:users_id 第4:positions_id
return $this->belongsToMany('App\Potision');
}
}
このModelを使えば、選手目線の情報(例えば大谷は投手と外野)が取得できる。
逆にポジション目線の情報(例えば外野はイチローと大谷)が欲しい場合は下記のモデルを作成する。
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Potision extends Model
{
public function members()
{
// 第2,3,4引数は省略できる
return $this->belongsToMany('App\User');
}
}
これらのModelを使って情報を取得する。