LoginSignup
1
2

More than 1 year has passed since last update.

多対多:野球選手を例にして考えてみる

Last updated at Posted at 2021-01-17

Laravel多対多について

多対多の概念や使い方が難しかったので、野球選手とポジションを例に考えてみる。
野球選手:ポジション

例えば、

選手目線

大谷は投手と外野の複数のポジションを守れる

ポジション目線

外野は大谷とイチロ-が守れる
このとき、野球選手とポジションは多対多の関係にあるといえる
この考えから下記のテーブルを作成する。

users(選手)目線

イチロー(1):外野(4)
大谷(2):投手(1)、外野(4)
阿部(3):捕手(2)、内野(3)

ポジション目線

投手(1):大谷(2)
捕手(2):阿部(3)
内野(3):阿部(3)
外野(4):イチロー(1)と大谷(2)
image.png

image.png

image.png

このとき、選手目線からみたポジションの情報がほしいときは下記の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を使って情報を取得する。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2