なんだかものすごい権限参照のクエリ重複してる...
①対処
blade内の
@can
@endcan
の記述を
@if
@endif
へと変更し、判定に用いる権限の値をviewへと渡す。
ループ処理内でcanが使われていた場合、これが原因の可能性が高いですが以下に続きを...
②原因
@canによる判定をおこなう時にFacadeクラスのインスタンス化、権限参照のDBアクセスが発生します。
今回の自分の場合レコード情報と合わせてアイコン表示をする必要がありました。
この時、ループ処理内で表示/非表示の制御をしていたことからレコード数分のDBアクセスが起こっていました。
③対処例
自分の作業でおこなった対処の一例です。
1:①の通りbladeの記述を@can→@ifへ変更
2:controller側でユーザーインスタンスから権限、またはそれに相当する値を取得し、compactもしくはwithでviewへ渡す
3:bladeで受け取り判定に使用
大したことはしていませんが、手間をかけずにできたのでこの方法で解決できるパターンもあると思います。
参考記事
@Yorinton様
https://qiita.com/Yorinton/items/604c5b1f3445cb23d565
公式
https://readouble.com/laravel/5.7/ja/authorization.html
以上となります。
仕様や現状の改善点など調べておりますので、備忘録ではありますが随時修正していきます。