首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel-8错误,Cache::remember()函数不起作用

Laravel-8错误,Cache::remember()函数不起作用
EN

Stack Overflow用户
提问于 2021-06-13 03:41:11
回答 1查看 638关注 0票数 0

我的应用程序在存储缓存时返回一个错误,我看到它正在保存,但它返回了这个错误。有谁能说出原因吗?下面是我的函数和错误:

返回错误的函数:

代码语言:javascript
复制
    <?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();
        });
    }
}

错误:

代码语言:javascript
复制
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

代码语言:javascript
复制
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

有人知道它会是什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-13 05:26:12

经过思考,我想我知道您的问题是什么了,您使用的是function ($keywords),但您应该使用function () use ($keywords),因为在source code中,您可以看到它正在执行$value = $callback(),但您的函数正在等待$keywords,如果您想要共享一个值,您必须再次使用use ($keywords),就像where中的第二个函数一样。

所以,它应该是:

代码语言:javascript
复制
return Cache::remember($keyName, $expiration, function () use ($keywords) {
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67952439

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档