二つのテーブルがあって、それを結合のように繋げて情報を採取したいときがある。例えばtitleとcharacterという二つのテーブルがある。そのときcharacterを参照するだけで、自動的にtitleからマンガの名前を持って来たい。
titleテーブル
id | name |
---|---|
1 | ONE PIECE |
2 | NARUTO |
characterテーブル
id | name | title_id |
---|---|---|
1 | Luffy | 1 |
2 | Zoro | 1 |
3 | Sasuke | 2 |
これはEloquentの1対1関連性の機能を使う。以下のようにtitleメソッドを設定する。これでCharacterテーブルは「title_id」を経由してTitleテーブルと繋がる。対象になるのはメソッド名に「_id」を付けた要素だ。
<?php class Character extends Eloquent { public function title() { return $this->belongsTo('Title'); } } ?>
コントローラー側では以下のようにwithを使ってメソッドを呼び出す。
$characters = Character::with('title')->get();
モデル側はこんな感じ。
@foreach ($characters as $character)
作品名:{{ $character->title['name'] }}
キャラクターの名前:{{ $character['name'] }}
@endforeach