Laravel кеширует запрос - PullRequest
       6

Laravel кеширует запрос

0 голосов
/ 24 января 2019

Короткий и простой вопрос. Работы ниже:

function something() {
    $this->load(['descriptions.expenses' => function ($q) use (&$transactions) {
        $transactions = $q->where('date', '>=', $this->user->startDate())->get();
    }]);

    return $transactions;
}

Возвращает все расходы, как ожидалось. Когда я кеширую это, вот так:

function something() {
    return cache()->rememberForever('budget_expenses_' . auth()->user()->id, function () {
        $this->load(['descriptions.expenses' => function ($q) use (&$transactions) {
            $transactions = $q->where('date', '>=', $this->user->startDate())->get();
        }]);

        return $transactions;
    });
}

Он сразу ничего не возвращает. Мне просто любопытно, почему это происходит. Причина кеширования в том, что он генерирует много запросов, очевидно.

Следующее также работает как ожидалось:

function something() {
    return cache()->rememberForever('something_' . auth()->user()->id, function () {
        return auth()->user()->budgets()->get();
    });
}

Проблема в том, что return $transactions; это, похоже, не кэшируется, поэтому вызов кешированного ключа позже просто вернет null.

Ответы [ 2 ]

0 голосов
/ 24 января 2019

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

0 голосов
/ 24 января 2019

Я думаю, что методы cache(), такие как remember или rememberForever, должны cache the resulting data from the closure на самом деле не возвращать это значение, вам все равно потребуется доступ к этому ключу для извлечения данных, что-то вроде этого:

cache()->rememberForever('budget_expenses_' . auth()->user()->id, function () {
    $transactions = /* Something */;

    $this->load(['descriptions.expenses' => function ($q) use (&$transactions) {
        $transactions = $q->where('date', '>=', $this->user->startDate())->get();
    }]);

    return $transactions;
});

return cache('budget_expenses_' . auth()->user()->id);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...