我有一张表:模型Setting
class Setting extends Model
{
protected $fillable = [
'name', 'value',
];
}
我创建了一个服务提供SettingsServiceProvider
并在app.php
class SettingsServiceProvider extends ServiceProvider
{
/**
* Bootstrap the application services.
*
* @return void
*/
public function boot(Factory $cache, Setting $settings)
{
if (\Schema::hasTable('settings')) {
config()->set('settings', Setting::pluck('value', 'name')->all());
}
}
/**
* Register the application services.
*
* @return void
*/
public function register()
{
}
}
将name
和value
添加到表settings
后,我在视图中调用它:
{{ config('settings.sitename') }}
其中sitename
是完全返回值的name
字段。
问题: 此方法的问题在于每个页面请求都会进行数据库调用。由于这些设置不是经常更改的,所以我一直在寻找一种方法来将其缓存在laravel缓存中。
我尝试了以下内容:
class SettingsServiceProvider extends ServiceProvider
{
/**
* Bootstrap the application services.
*
* @return void
*/
public function boot(Factory $cache, Setting $settings)
{
$settings = $cache->remember('settings', 60, function() use ($settings)
{
return $settings->pluck('name', 'value')->all();
});
config()->set('settings', $settings);
/* if (\Schema::hasTable('settings')) {
config()->set('settings', Setting::pluck('value', 'name')->all());
} */
}
/**
* Register the application services.
*
* @return void
*/
public function register()
{
//
}
}
但是当我尝试将它返回到这样的视图时:
{{ config('settings.sitename') }}
没有任何回报。