我有一个表:设置模型 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
后,我在 View 中这样调用它:
{{ 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()
{
//
}
}
但是当我尝试将它返回到这样的 View 时:
{{ config('settings.sitename') }}
什么都得不到返回。
最佳答案
我没有足够的声誉来评论帖子,但这应该可以解决
替换:
return $settings->pluck('name', 'value')->all();
与:
return $settings->pluck('value', 'name')->all();
然后像往常一样:
php artisan config:clear
php artisan cache:clear
关于php - 在 laravel 中全局缓存表值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43753072/