php - 在 laravel 中全局缓存表值

标签 php laravel caching laravel-5.4

我有一个表:设置模型 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()
    {

    }
}

namevalue 添加到表settings 后,我在 View 中这样调用它:

{{ config('settings.sitename') }}

其中sitenamename字段,完美返回值。

问题: 这种方法的问题是每个页面请求都会进行一次数据库调用。由于这些设置不会经常更改,所以我一直在寻找一种方法将其缓存在 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/

相关文章:

javascript - 远程 javascript-ajax-php 攻击

php - 如何使用 Turtle sparql php

PhpMyAdmin 表给出空列

php - 使用 Eloquent 查找或创建

php - 使用 PHP 在 x 个 DIV 之后插入不同的 DIV

mysql - 在 Laravel 中选择

php - Laravel 5 重置密码通知不会发送

caching - 使用 Nginx 和 Etags 对动态内容进行服务器端缓存

java - Spring应用程序启动时如何使缓存依赖于其他缓存

android - Android 中远程服务器与本地数据库(缓存)同步的智能算法,分页支持离线