PHP-Laravel- プログラミング

【Laravel入門】belongTo リレーションの解説

今回はリレーション、テーブルとテーブルを1対1で結ぶ「belongToメソッド」を解説します。

Laravelについてよくわからないや。。。という方は、以下を併せて読んでいただけるとご理解いただけると思います。

Laravelとは?現在の、PHPフレームワークの筆頭として大活躍 (akihisa-h.com)

belongToで1対1リレーション構築

belongToメソッドは、テーブル間で1対1の関係を構築する時に使います。

例として、会員情報用の「userテーブル」と、各会員の住所を記録した「addressテーブル」があるとします。

このとき「userテーブル」が主で、ユーザー情報を補足している「addressテーブル」は「userテーブル」に対して従属した関係となっています。ふたつのテーブルをユーザーIDを介して、リレーションを構築します。

ユーザーIDid
ユーザー名name
メールアドレスemail
パスワードpassword
作成日時created at
userテーブル
IDid
ユーザーIDuser_id
アドレスaddress
作成日時created at
addressテーブル

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」について解説でした。

    おすすめ学習書

    -PHP-Laravel-, プログラミング