Laravel-8 错误 Cache::remember() 函数不起作用
Laravel-8 error with Cache::remember() function doesn't work
我的应用程序在存储缓存时返回错误,我看到它正在保存,但它返回了这个错误。谁能说为什么?
这是我的函数和错误:
returns 错误的函数:
<?php
namespace App\Repositories\ProductFilter;
use App\Models\Product;
use App\Repositories\Contracts\IProductFilterRepository;
use Illuminate\Support\Facades\Cache;
class ProductFilterRepository implements IProductFilterRepository
{
public function getProductsRecommendations($keywords)
{
$expiration = 10;
$keyName = 'productsRecommended';
return Cache::remember($keyName, $expiration, function ($keywords) {
return Product::query()->where(function ($productsAll) use ($keywords) {
if ($keywords) {
foreach ($keywords as $keyword)
$productsAll->orWhere('title', 'LIKE', '%' . $keyword . '%')->orWhere('description', 'LIKE', '%' . $keyword . '%')->orWhere('code', 'LIKE', '%' . $keyword . '%');
}
})->where('status', 'active')->get();
});
}
}
错误:
ArgumentCountError
Too few arguments to function App\Repositories\ProductFilter\ProductFilterRepository::App\Repositories\ProductFilter\{closure}(), 0 passed in /var/www/vendor/laravel/framework/src/Illuminate/Cache/Repository.php on line 385 and exactly 1 expected
http://localhost:8888/recommended
我的 .env 缓存设置
BROADCAST_DRIVER=log
CACHE_DRIVER=redis
REDIS_URL=redis
QUEUE_CONNECTION=sync
SESSION_DRIVER=redis
SESSION_LIFETIME=120
MEMCACHED_HOST=127.0.0.1
REDIS_HOST=redis
REDIS_PASSWORD=null
REDIS_PORT=6379
REDIS_CLIENT = redis
有谁知道那是什么?
稍加思考后,我想我知道你的问题是什么,你正在使用 function ($keywords)
,但你应该使用 function () use ($keywords)
,因为在 source code 中,你看到它正在做 $value = $callback()
,但是你的函数正在等待 $keywords
,如果你想共享一个值,你必须再次使用 use ($keywords)
,就像 [=16] 中的第二个函数=].
所以,应该是:
return Cache::remember($keyName, $expiration, function () use ($keywords) {
我的应用程序在存储缓存时返回错误,我看到它正在保存,但它返回了这个错误。谁能说为什么? 这是我的函数和错误:
returns 错误的函数:
<?php
namespace App\Repositories\ProductFilter;
use App\Models\Product;
use App\Repositories\Contracts\IProductFilterRepository;
use Illuminate\Support\Facades\Cache;
class ProductFilterRepository implements IProductFilterRepository
{
public function getProductsRecommendations($keywords)
{
$expiration = 10;
$keyName = 'productsRecommended';
return Cache::remember($keyName, $expiration, function ($keywords) {
return Product::query()->where(function ($productsAll) use ($keywords) {
if ($keywords) {
foreach ($keywords as $keyword)
$productsAll->orWhere('title', 'LIKE', '%' . $keyword . '%')->orWhere('description', 'LIKE', '%' . $keyword . '%')->orWhere('code', 'LIKE', '%' . $keyword . '%');
}
})->where('status', 'active')->get();
});
}
}
错误:
ArgumentCountError
Too few arguments to function App\Repositories\ProductFilter\ProductFilterRepository::App\Repositories\ProductFilter\{closure}(), 0 passed in /var/www/vendor/laravel/framework/src/Illuminate/Cache/Repository.php on line 385 and exactly 1 expected
http://localhost:8888/recommended
我的 .env 缓存设置
BROADCAST_DRIVER=log
CACHE_DRIVER=redis
REDIS_URL=redis
QUEUE_CONNECTION=sync
SESSION_DRIVER=redis
SESSION_LIFETIME=120
MEMCACHED_HOST=127.0.0.1
REDIS_HOST=redis
REDIS_PASSWORD=null
REDIS_PORT=6379
REDIS_CLIENT = redis
有谁知道那是什么?
稍加思考后,我想我知道你的问题是什么,你正在使用 function ($keywords)
,但你应该使用 function () use ($keywords)
,因为在 source code 中,你看到它正在做 $value = $callback()
,但是你的函数正在等待 $keywords
,如果你想共享一个值,你必须再次使用 use ($keywords)
,就像 [=16] 中的第二个函数=].
所以,应该是:
return Cache::remember($keyName, $expiration, function () use ($keywords) {