【发布时间】:2022-01-26 21:53:42
【问题描述】:
我正在尝试进行多重搜索,一切正常,但我对顶级课程有疑问。它在$courseIds 和$fieldOrder 上的红线。有人可以帮我为什么它不起作用吗?我在尝试搜索评分和分级课程时遇到错误。
<input class="search-header-field" type="text" name="ratedLevel">
$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);
$courses = Course::when(
$r->level,
function ($query, $level) {
return $query->where('level', 'like', "%$level%");
}
)
->when(
$r->category,
function ($query, $category) {
return $query->where('course_category_id', 'like', "%$category%");
}
)
->when(
$r->discount,
function ($query, $discount) {
return $query->where('discount', '!=', $discount);
}
)
->when(
$r->ratedLevel,
function ($query, $ratedLevel) {
return $query->whereIn('id', $courseIds)
->where('level', 'like', "%$ratedLevel%")
->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->get();
}
)
->paginate(18);
错误
SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册以了解正确的语法使用
【问题讨论】:
-
错误在第一行代码,你不能在 where course_id = DB:raw..
-
如果您查看错误的其余部分,它会告诉您查询中语法错误的确切位置。正如@Mar 所说,它将是您要求它执行
WHERE course_id = AVG(stars_rated) as count的地方,这显然是无稽之谈。 -
感谢大家的回复。但是我该如何解决这个问题?
-
我把它改成了 $itemsRated = DB::table('ratings')->select('course_id', DB::raw('AVG(stars_rated) as count')) ->groupBy ('course_id')->orderBy("count", 'desc')->get();现在我收到错误 Undefined variable $courseIds it can't get courseIds and $fieldOrder in query