查詢范圍不起作用,我正在做,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()行,并且執行此操作,而不是實際過濾的查詢
uj5u.com熱心網友回復:
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);
});
});
}
假設您categories()在 Post Model 中定義了關系,我相信這應該適合您。
還要dd(request(['search', 'category']))檢查你是否得到了你想要的陣列。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/407382.html
標籤:
下一篇:回傳上一頁-Laravel8專案
