3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

理由

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プロパティを使う時の問題点と、改善の手段としてこういうのがあるで~というのを紹介してみました。
実際に試したり改善できた方はぜひ記事にして下さい。

いいね100回連打します。レンダーだけに。(バカウケ)

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?