今回はリレーション、テーブルとテーブルを1対1で結ぶ「belongToメソッド」を解説します。
Laravelについてよくわからないや。。。という方は、以下を併せて読んでいただけるとご理解いただけると思います。
Laravelとは?現在の、PHPフレームワークの筆頭として大活躍 (akihisa-h.com)
belongToで1対1リレーション構築
belongToメソッドは、テーブル間で1対1の関係を構築する時に使います。
例として、会員情報用の「userテーブル」と、各会員の住所を記録した「addressテーブル」があるとします。
このとき「userテーブル」が主で、ユーザー情報を補足している「addressテーブル」は「userテーブル」に対して従属した関係となっています。ふたつのテーブルをユーザーIDを介して、リレーションを構築します。
ユーザーID | id |
ユーザー名 | name |
メールアドレス | |
パスワード | password |
作成日時 | created at |
ID | id |
ユーザーID | user_id |
アドレス | address |
作成日時 | created at |
belongsToメソッドを使ってリレーションを定義します
「addressテーブル」側から定義します。
「addressテーブル」は、「userテーブル」内のカラムを使用して、「userテーブル」に属している関係性を持ちます。
「addressテーブル」側から「userテーブル」に対してリレーションを作るとき、【belongsTo】メソッドを使います。
belongsToメソッドを使ってリレーションを実践します
「addressテーブル」から「userテーブル」へリレーションを定義します。
1.Addressモデルにリレーションを追加する
appフォルダの「Address.php」ファイルを編集していきます。
public function user() {
return $this->belongsTo(User::class);
}
この設定をしたことで、AddressモデルからUserモデルを呼び出せるようになります。
2.リレーションを確認してみます
routesフォルダの中の「web.php」 ルートファイルを編集していきます。
Addressモデルを名前空間を省略して呼び出せるように、 web.phpファイルの先頭に下記の一文を書き加えます。
use App\Models¥Address;
続いて、下記のコードを追加します。
Route::get('/{id}/address', function($id) {
$address=Address::find($id);
return "アドレス番号".$id."のユーザーの名前は".$address->user->name."さんです。";
});
コードの説明
- {id}/addressページにアクセスしたら、function() { } の命令を実行します。
- アドレス番号は、$id 番のアドレスとします。
- 「”アドレス番号”.$id.”のユーザーの名前は”.$address->user->name.”さんです。”」という文を返してください。$address->user->nameは、このアドレス番号をもつユーザーの「name」を取ってくるという意味です。
ブラウザを開き、デフォルトのページのURLに 【/1/address】として、アクセス ⇒内容が表示されればOKです。
従となる側でリレーションを定義する時はbelongsToを使います。
以上、リレーション「belongTo」について解説でした。
おすすめ学習書
動かして学ぶ!Laravel開発入門 (NEXT ONE) [ 山崎 大助 ] 価格:3300円 |
Laravelの教科書 バージョン10対応 [ 加藤 じゅんこ ] 価格:3300円 |
PHPフレームワークLaravel Webアプリケーション開発/竹澤有貴/栗生和明/新原雅司【3000円以上送料無料】 価格:4180円 |