[Laravel] 子テーブルの情報を簡単に取得するwith

親子関係にある子テーブルのデータを簡単に取得できるメソッドがLaravelには用意されています。with関数を使えば発行するクエリーが少なくなり、システムへの負荷も抑えながらデータを取得することができます。このような関数を使って開発スピードを上げることができるのがフレームワークの良さですね。

公式ドキュメントに詳しい解説があります。
Laravel公式サイト Eloquent-rRelationships Eager-Lording

リレーションシップの確認

下記のようなモデル(テーブル)とリレーションシップを作成しておきます。
・BookとAuthorモデルがある
・Bookモデルに下記を指定

・コントローラーでuse App\Post;を指定

1つのリレーションシップを指定

この一行で2つのクエリが生成され、authorのデータも取得できます。
select * from books
select * from authors where id in (1, 2, 3, 4, 5, …)

複数のリレーションシップを指定

複数のリレーションシップが設定されている場合は配列で指定するだけで、複数の子テーブルのデータの取得が可能です。

ネストされたテーブルデータを取得

本テーブル(book)と著者テーブル(author)、そして著者と著者の詳細テーブル(contacts)の3つがリレーションされているとします。これらのデータを一括で取得するにはドット構文を利用します。

カラムを指定して取得

カラムを指定してのデータ抽出です。idは必ず含めなければならないというルールがあります。

条件指定して取得

functionでクエリを指定するとwhere句を利用することができます。

ソートして取得

ソートも条件指定と同様にfunctionでクエリを指定します。



Author: webmaster