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



查询范围不工作,我正在执行dd(),但无法通过解决问题

模型中的queryscope方法

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 Model中定义了categories()关系,我相信这应该对您有效。

还有dd(request(['search', 'category'])),用于检查您是否正在获得所需的数组。

最新更新