ふたりはララベル (Laravel PHP Framework)

PHPフレームワークのLaravelの体験記を書いていきます。こんなタイトルのブログですが萌え系アニメは一秒たりとも観たことがありません。

DBをEloquent上で結びつける

二つのテーブルがあって、それを結合のように繋げて情報を採取したいときがある。例えばtitleとcharacterという二つのテーブルがある。そのときcharacterを参照するだけで、自動的にtitleからマンガの名前を持って来たい。

titleテーブル

idname
1ONE PIECE
2NARUTO

characterテーブル

idnametitle_id
1Luffy1
2Zoro1
3Sasuke2
上記の表の場合「$character = Character::find(1)」だけで、LuffyとONE PIECEの両方を手にいれたいときだ。

これは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