我正在嘗試按單個類別或多個類別過濾課程,但它不起作用。
$courses = Course::when($r->catId, function ($query, $catId) {
$category = CourseCategory::find($catId);
$catChildrenIdsArray = $category->children()->pluck('id')->toArray();
$catParentIdsArray = CourseCategory::whereIn('parent_id', $catChildrenIdsArray)->pluck('id')->toArray();
return $query->whereIn('course_category_id', $catParentIdsArray);
})
->when($r->level, function ($query, $level) {
return $query->where('level', 'like', "%{$level}%");
})
// PROBLEM NOT WORKING
->when($r->category, function ($query, $category) {
$query->when(is_array($category) && count($category) > 1, function ($query) use ($category) {
$query->where(function ($q) use ($category) {
foreach ($category as $cat) {
return $q->orWhere('course_category_id', 'like', "%{$cat}%");
}
});
}, function ($query, $category) {
return $query->where('course_category_id', 'like', "%{$category}%");
});
})
// END OF PROBLEM
->when($r->discount, function ($query, $discount) {
if ($discount == 1) {
return $query->where('discount', '!=', null);
}
})
->when($r->rate, function ($query, $rate) {
if ($rate == 1) {
$itemsRated = DB::table('ratings')->select('course_id', DB::raw('AVG(stars_rated) as count'))
->groupBy('course_id')->orderBy("count", 'desc')->get();
$courseIds = [];
foreach ($itemsRated as $item) {
array_push($courseIds, $item->course_id);
}
$fieldOrder = join(", ", $courseIds);
return $query->whereIn('id', $courseIds)->orderByRaw("FIELD(id, $fieldOrder)");
}
})
->when($r->price && in_array($r->price, ['more-expensive', 'less-expensive']), function ($query) use ($r) {
return $query->orderBy('price', $r->price == 'less-expensive' ? 'asc' : 'desc');
}, function ($query) {
return $query->statusOn()->order()->orderBy('id');
})->paginate(18)->appends($r->query());
其他一切都在作業折扣過濾器或評級或級別,但我無法搜索單個或多個類別它總是搜索刀片中的所有類別就像這樣
<input name="category[]" type="checkbox" value="{{ $c->id }}">
請有人可以幫我解決這個問題,我正在嘗試解決這兩天......(
uj5u.com熱心網友回復:
我相信您需要在方法的閉包部分的開頭使用orWhere子句而不是子句。wherewhen
其次,您在回圈中回傳得太快了。foreach該return陳述句應該在回圈之外。
$query->where(function ($q) use ($category) { foreach ($category as $cat) { return $q->orWhere('course_category_id', 'like', "%{$cat}%"); } });
第三,在查詢條件下傳遞整個category[]請求引數陣列是沒有意義的。LIKE
}, function ($query, $category) { return $query->where('course_category_id', 'like', "%{$category}%"); });
解決方案
因此,該部分的查詢category可能是:
// ... PROBLEM NOT WORKING
->when($r->has('category[]') && count($r->input('category[]')), function ($query) use ($r) {
return $query->orWhere(function ($q) use ($r) {
foreach ($r->input('category[]') as $cat) {
$q->orWhere('course_category_id', 'like', "%{$cat}%");
}
return $q;
});
})
// .... END OF PROBLEM
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/422354.html
標籤:
