Laravelを使った中間テーブル取得方法のポイントをまとめます。
前提
テーブル同士の関係が多対多のデータを取得したい。
多対多の関係性についての説明は省略し、実際にlaravelで中間テーブルのデータを扱う方法を書きます。
例として、商品テーブル(items)と注文テーブル(orders)を扱う場合を想定。
モデルの定義
リレーションを宣言するために、それぞれのテーブルのモデルに以下を追記する。
Itemモデル
[php]
public function order()
{
return $this->belongsToMany(‘App\Oder’);
}
[/php]
Orderモデル
[php]
public function item()
{
return $this->belongsToMany(‘App\Item’);
}
[/php]
SQLの場合はitemテーブルと中間テーブルをjoinし、中間テーブルとorderテーブルをjoinするという方法が普通なので、その考え方が頭に入っていると逆に混乱を招きそう。
基本的にはこれだけで中間テーブルを自動的に判断してくれるわけだが、その為には中間テーブルの命名規則があるので、以下に記載。
関連付けるテーブル名をアルファベット順にアンダーバーで繋げる。
例えばitemsとordersならitem_order、usersとitemsならitem_userといったテーブル名称にする。
・中間テーブルのカラム
中間テーブルのカラムには、中間テーブル自身のID、そして各テーブルのIDをカラムに持つ。
id,item_id,order_idといった感じ。
こうすることでSQLでいうテーブルのjoinを勝手にやってくれる。
当然関連付けるカラム名を指定することもでき、その場合はbelongsToMany()の引数にカラム名を追加する。
ただせっかく楽に書けるので、できれば最初からこの命名規則に従ったテーブルを作るのがおすすめ。
コントローラー
コントローラーではシンプルにモデルのデータをビューに渡す
[php]
・・・
$items = Item::all();
return view(‘testview’, [
[‘items’ => $items]);
[/php]
ビュー
bladeでのデータの表示方法
[html]
@foreach ($items->order as $order)
{{$order->name}}</span>
@endforeach
[/html]