简短而简单的问题。下面的作品:
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
。
答案 0 :(得分:1)
我认为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);
答案 1 :(得分:0)
似乎我的缓存毕竟还在工作,但是我并没有使它们对于每个预算都是唯一的,这意味着,对于每个预算,所有expenses
都是相同的,因为第一个被缓存了...