前提・実現したいこと
Laravelの学習中に浮かんだ疑問で、ググってみても答えが見当たらなかったので質問させていただきます。
*注意: 初心者のため質問内容が要を得ないかもしれません。
一般的に、DBへの接続回数やSQLの実行回数を減らしたほうが処理時間・負荷が減り良いこと、とされています。(例として、forループ内でDB接続はしない、一回取ってきたデータ(連想配列)から欲しいデータを取り出す操作をするようにする、など)
本題
LaravelのCollectionインスタンスでwhere()などの操作をしているとき、DB接続は行われているのでしょうか?
LaravelではEloquentを利用して簡単にDBからレコードを取ってこれますが、戻り値はCollectionクラスであり、様々なメソッドで任意のレコードを取り出しやすくなっています。
(例)
PHP
1$authors = \App\Author::all(); // 全件取得 2foreach ($authors as $author) { 3 echo $author->name // 著者名を取得 4}
そこで疑問なのが、filter(), count(), where()などのメソッド利用時にDBアクセスが発生しているかどうか?(SQLが実行されているのかどうか?)
ということです。
具体的なコードでいうと以下のような状況でのDBアクセスはどうなっているのか?というのが分からないのです。
PHP
1$authors = \App\Author::all(); // さすがにここではDBアクセスは行われている? 2 3// このようにfilter()をするときはDBアクセスしている?していない? 4$filtered_authors = $authors->filter(function ($author) { 5 return $author->id > 5; 6});
要を得ない質問で恐縮ですが、分かる方がいらっしゃいましたらご教示いただけますと幸いです。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/07/05 05:32
2019/07/05 05:45