查询范围不起作用,它不显示 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']))
检查您是否获得了所需的数组。
查询范围不工作,我正在做 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']))
检查您是否获得了所需的数组。