Php Laravel缓存查询
简短的问题。以下工作:Php Laravel缓存查询,php,laravel,caching,Php,Laravel,Caching,简短的问题。以下工作: function something() { $this->load(['descriptions.expenses' => function ($q) use (&$transactions) { $transactions = $q->where('date', '>=', $this->user->startDate())->get(); }]); return $trans
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();
});
}
问题是
返回$transactions
这似乎不会被缓存,因此稍后调用缓存键只会返回null
我认为cache()
上的方法,如memberforever
或memberforever
应该缓存来自闭包的结果数据
实际上不会返回该值,您仍然需要访问该密钥来检索数据,如下所示:
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);
看起来我的缓存毕竟是有效的,但我并没有让它们对每个预算都是唯一的,这意味着,对于每个预算,所有的
费用都是相同的,因为第一个被缓存了…现在看到这一点是有意义的,至少我知道在这种情况下“出了什么问题”。在其他情况下,我是这样做的,它可以工作,但在这种情况下,它不会像您所说的那样返回实际的$transactions
。谢谢你帮我澄清:)我现在已经重新打开(或不接受)你的答案,因为我还不清楚为什么我的例子不起作用。我以为我明白了,但我不明白,因为我更新的问题显示了一个示例,它确实按照我的预期工作。这只是一个粗略的猜测,但是,由于您在传递参数时使用了&
,因此它可能无法将内存位置
与缓存服务
结合起来以实际插入正确的元素。疯狂的猜测我现在正在玩弄它,我想我已经明白了。因为在我看来,我实际上得到了多个预算的费用
,第一个返回的费用将被缓存。因为对于特定的预算
它是null
,所以它也会为所有其他预算显示null
。。。愚蠢的我:)必须使缓存对每个预算都是唯一的。谢谢你的帮助:)