Кэшировать конфигурационную таблицу и обращаться к ней глобально Laravel - PullRequest
0 голосов
/ 14 октября 2019

У меня есть модель Configuration с таблицей в базе данных с именем configurations.

. В ней 3 столбца: id, ключ и значение

Я хочу кэшироватьвсе пары ключ / значение из этой таблицы для лучшей производительности и меньшего количества транзакций базы данных.

Что я сделал до сих пор: Я создал Provider с именем ConfigurationsServiceProvider иНиже приведен код метода register():

public function register()
{
    $this->app->singleton('configurations', function ($app) {
        return $app['cache']->remember('configurations', 60, function () {
            return Configuration::pluck('key', 'value')->toArray();
        });
    });
}

Я также зарегистрировал провайдера в config/app.php.

Теперь я хочу добиться следующего:

  • Доступ к этим парам ключ / значение конфигурации по всему миру путем вызова метода, например configurations('key')
  • Данные конфигурации должны кэшироваться навсегда для всех пользователей. Его следует кэшировать только тогда, когда пользователь вставляет / обновляет любую запись ключа / значения в таблице базы данных
  • Не важно, но было бы очень здорово, если бы я мог каким-то образом объединить и получить доступ к данным configurations с помощью глобальной платформы Laravel. config method.

Также, пожалуйста, предложите, если есть какой-нибудь лучший способ, кроме .env, для сохранения данных динамической конфигурации для приложения из пользовательского интерфейса.

1 Ответ

0 голосов
/ 14 октября 2019

В этом случае я бы сделал вспомогательную функцию, загружаемую через композитор

Допустим, app/Helpers.php

<?php

function configurations($key)
{
    return \Cache::rememberForever("config-$key", function () use ($key) {
        return Configuration::where('key', $key)->first()->value;
    });
}

И автоматически загрузил ее в composer.json

"autoload": {
    "files": [
        "app/Helpers.php"
    ]
},

Но вам все равно придется вручную очищать кеш при изменении значения ключа

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...