查询范围不起作用,它不显示 laravel 8.77 项目中的过滤数据

query scope is not working, it is not showing filtered data in laravel 8.77 project

查询范围不工作,我正在做 dd() 但无法通过这种方式解决问题

模型中的查询范围方法

public function scopeFilter($query, array $filters)
    {
        $query->when($filters['search'] ?? false, fn($query, $search) => $query
            ->where('title', 'like', '%' . $search . '%')
            ->orWhere('body', 'like', '%' . $search . '%')
        );

        $query->when($filters['category'] ?? false, fn($query, $category) => $query
            ->whereExists(fn($query) => $query
                ->from('categories')
                ->whereColumn('categories.id', 'posts.category_id')
                ->where('category.slug', $category)
            )
        );
    }

控制器中的索引(显示所有带有过滤器的帖子)方法

public function index()
    {
        return view('posts', [
            'posts' => Post::latest()->filter(request(['search', 'category']))->get(),
            'categories' => Category::all()
        ]);
    }

当我这样做时 127.0.0.1:8000/?categories=nihil-est-odit-nam-provident-omnis,它必须工作并过滤具有给定 slug 类别的帖子,但它显示所有帖子,即使在 clockwork 浏览器扩展中,它还显示 categories' => Category::all() 行,这是执行的,而不是实际过滤的查询

public function scopeFilter($query, array $filters)
{
    $search = $filters['search'] ?? false;
    $category = $filters['category'] ?? false;

    $query
        ->when($search, function ($query, $search) {
            $query
                ->where('title', 'like', '%' . $search . '%')
                ->orWhere('body', 'like', '%' . $search . '%');
        })
        ->when($category, function ($query, $category) {
            $query
                ->whereHas('categories', function ($query) use ($category) {
                    $query->where('slug', $category);
                });
       });
 }

假设您在 Post 模型中定义了 categories() 关系,我相信这对您有用。

另外 dd(request(['search', 'category'])) 检查您是否获得了所需的数组。