こんにちは。HappyLifeCreatorsでエンジニアをしている砂町です。
以前「未経験から転職してWebシステムを開発した話」という内容でブログを書いて以来なので、1年と3ヶ月ぶりになります。
そのブログはこちらです↓
https://www.happylifecreators.com/blog/sunamachi-history
これ以降の1年3ヶ月でさらに色々な開発に携わらせていただき、楽しかったことや大変だったことがたくさんありますが、この話はまた今度にさせていただきます。
さて、今回のテーマは「Laravelのwithメソッド」です。
これは僕はLaravelを実際にLaravelで開発しているときに便利だなと思った機能です。
withメソッドの説明の前に「Eager loading」と「Lazy loading」ついて簡単に説明します。
・Eager loadingとは、SQL的にJoinしたもの
・Lazy loadingとは、SQL的にJoinしていないもの
となります。
この「Eager loading」というものを行うのに、Laravelでは「withメソッド」というものがあります。
これはLaravel6系から追加された、Collectionの拡張機能なります。
ちなみに「Lazy loading」をLaravelで行うためのメソッドとして「loadメソッド」というものがありますが、今回は割愛します。
withメソッドが便利だと感じた例
上記の画像のようなテーブル構成のデータを、ネストした形で加工することなく取得したいとします。
userModel
まず「Userテーブル」に関連する「Profileテーブル」と「Foodテーブル」にリレーションを張ります。
Userテーブルから見て
・Profielテーブルは「1:1」なので「hasOne」
・foodテーブルは「1:n」なので「hasMany」
となります。
あとは取得する際にwithメソッドを使って、さっき関連付けた内容を指定してあげると下記のようにネストしたでーたが簡単に取得できます。
取得データ
ちなみにデータがない場合は
・hasOneで関連付けたものは「null」
・hasManyで関連づけたものは「[ ]」(空配列)
となります。
laravelには便利なメソッドがたくさん用意されているので、ぜひ活用してみてください。ブログでも色々紹介して行けたらいいなと思っています。