Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从laravel中的数据库全局预加载一些记录?_Laravel_Singleton_Persistence - Fatal编程技术网

如何从laravel中的数据库全局预加载一些记录?

如何从laravel中的数据库全局预加载一些记录?,laravel,singleton,persistence,Laravel,Singleton,Persistence,例如,我有一个站点设置或用户权限列表。我想确保只对这些数据进行一次调用(这里有点单音逻辑) 我认为可以使用一个服务容器将数据加载到中间件中,并像以前一样使用它 $permissions = app('permissions'); // Collection 或 它可以在单元测试和Laravel应用程序的任何其他地方访问 撇开问题不谈,这对redis是否更有效?打开连接的开销更小,访问速度更快,数据很少更改且几乎都是关键值您可以在引导功能中的AppServiceProvider上定义单例:

例如,我有一个站点设置或用户权限列表。我想确保只对这些数据进行一次调用(这里有点单音逻辑)

我认为可以使用一个服务容器将数据加载到中间件中,并像以前一样使用它

$permissions = app('permissions'); // Collection

它可以在单元测试和Laravel应用程序的任何其他地方访问


撇开问题不谈,这对redis是否更有效?打开连接的开销更小,访问速度更快,数据很少更改且几乎都是关键值

您可以在引导功能中的AppServiceProvider上定义单例:

      $this->app->singleton( 'systemSettings', function () {
           return Settings::get();
        } );
然后通过调用:

$systemSettings = app('systemSettings');

我对权限所做的-创建了一个助手,您可以传递权限的“键”并获得
true | false
。用户的权限存储在缓存中。如果找不到缓存密钥,我的助手将从数据库读取权限并在之前存储在缓存中returning@NoOorZ24我想走得更远。我希望一次加载所有用户权限并从内存中查询它们,而不是向缓存请求特定权限。每个请求都会以最有效的方式重新加载特定的用户权限,而无需接触磁盘上的文件(如果有多个php FPM在运行,这是最好的方式)。虽然您的解决方案很好,但它需要缓存失效和一些复杂性,而我更喜欢从数据库查询物化视图并将其存储在内存中。您可以这样做,即不传递权限键返回数组/集合,因为它可以从缓存中读取我需要的内容。非常感谢。
$systemSettings = app('systemSettings');