【问题标题】:Laravel Permissions query cacheLaravel 权限查询缓存
【发布时间】:2020-03-11 04:04:39
【问题描述】:

我正在使用 Laravel 权限包 (https://github.com/spatie/laravel-permission) 来管理 Laravel 项目的角色权限。

在应用程序的每个页面上,我都可以从 Laravel 调试器中看到以下两个查询正在运行。角色和权限没有经常更改,我想缓存这些查询。你能告诉我该怎么做吗?

select `roles`.*, `model_has_roles`.`model_id` as `pivot_model_id`, `model_has_roles`.`role_id` as `pivot_role_id`, `model_has_roles`.`model_type` as `pivot_model_type` from `roles` inner join `model_has_roles` on `roles`.`id` = `model_has_roles`.`role_id` where `model_has_roles`.`model_id` = 1 and `model_has_roles`.`model_type` = 'App\Models\User'

select `permissions`.*, `model_has_permissions`.`model_id` as `pivot_model_id`, `model_has_permissions`.`permission_id` as `pivot_permission_id`, `model_has_permissions`.`model_type` as `pivot_model_type` from `permissions` inner join `model_has_permissions` on `permissions`.`id` = `model_has_permissions`.`permission_id` where `model_has_permissions`.`model_id` = 1 and `model_has_permissions`.`model_type` = 'App\Models\User'

【问题讨论】:

    标签: laravel laravel-permission


    【解决方案1】:

    您可以使用this package 来缓存您的查询。

    要对特定查询启用缓存,您可以执行以下操作:

    DB::cacheFor(now()->addHours(24))->raw('YOUR QUERY GOES HERE');
    

    【讨论】:

    • 感谢您的回答。但问题是查询是从包本身运行的。我可以缓存我的应用程序查询而无需任何额外的包。当我可以使用权限包并缓存这些通用查询时,我正在寻找解决方案。
    • 我不相信您可以默认缓存通用查询。你可以用这个包做的最好的事情是使用这个包提供的QueryCacheabletrait 缓存整个模型,这同样不能满足你的目的。
    • 你可以做的一件事是找出 Laravel Permission 包从哪里运行这些查询,扩展这些类并手动记住这些查询。
    猜你喜欢
    • 1970-01-01
    • 2021-11-18
    • 2013-06-10
    • 1970-01-01
    • 2016-07-11
    • 2014-11-30
    • 2018-06-27
    • 1970-01-01
    相关资源
    最近更新 更多