理由
hydrateの際に不要なクエリが発行されるらしい。
これを知った発端はこの質問
どうやら質問者はLivewireのライフサイクルの内の一つであるHydrateの際に、更新前の状態を維持するためのクエリが発行されるのをどうしたら止められるんやってことを聞いているようである。
結論
Livewireでは更新前と更新後の状態を取得するためにクエリを発行するそうです。実際、更新後だけしか必要ないときの方が多いのかなーと思うので、できれば更新前の状態を取得するクエリは発行したくないですよね。
解消方法は3パターン
①CollectionをArray型にしてpublicプロパティに入れる。
Collectionじゃなければクエリは発行されないとのこと。(Modelはわからん)
この時使うメソッドはall()かtoArray()のどっちがいいんやろか。。。
②Collectionの主キーだけpublicプロパティで管理する
Collectionを直接publicプロパティに入れるのではなく、主キーだけを配列で入れる。
renderの際に、主キーを使ってblade側に渡せばよい。
③wire:ignoreを使う
上記質問の解答にこう書いてある。
「Depending on how you use these categories, you may be able to exclude them from your component or use wire:ignore so that they are not rendered on every view render.」
訳:それらのカテゴリープロパティ(public $categories)をどのように使うか次第で、Livewireコンポーネントから取り除けるかもしれないし、プロパティが毎度毎度レンダーされないようにwire:ignoreを使えるかもしれない。
これは興味深いですねぇ。オーン。
まとめるンゴ
近いうちに実際に自分で開発したアプリケーションを使ってクエリ発行数を抑えられるか試してみようかと思います。
ひとまずpublicプロパティを使う時の問題点と、改善の手段としてこういうのがあるで~というのを紹介してみました。
実際に試したり改善できた方はぜひ記事にして下さい。