Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 24.08.2020 10:19:22

Повторяющиеся вызовы к БД из провайдера

Здравствуйте!

В БД в таблице user_balance хранится информация о балансе пользователя.

- Модель UserBalance
- Провайдер UserBalanceProvider
- Фасад Balance для Провайдера

К примеру, у меня в хедере должна появлятся информация о балансе + где то на отдельных страницах также она появляется уже в другом месте.
Сейчас для получения баланса я пишу в blade:

Balance: {{Balance::get()}}

Сам код получения баланса такой:

 function get() {
        if ($this->balanceCache != null) {
            return $this->balanceCache;
        }
        
        $balance = Balance::where('user_id', Auth::id())->first();
        if ($balance == null) {
            return $this->balanceCache = 0;
        }
        return $this->balanceCache = $balance->amount;
    }

Так вот, я использую balanceCache, чтобы при повторном вызове Balance::get не было повторящего запроса в БД. Но мне кажется, что это как-то очень некрсиво и неправильно. Как в Laravel будет правильнее обрабатывать повторный вызов метода для получения баланса в Blade?

Не в сети

#2 24.08.2020 17:05:43

Re: Повторяющиеся вызовы к БД из провайдера

Для подобных целей используется ViewComposer. Он сам позаботиться о том чтобы не было повторных запросов. И никаких выборок в блейде вообще быть не должно.

Не в сети

#3 24.08.2020 18:09:57

Re: Повторяющиеся вызовы к БД из провайдера

Еще можно инжектить сервисы, которые будут прятать внутри себя вычисления
https://www.youtube.com/watch?v=7wsef-rLX5w


There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Не в сети

Подвал раздела