【问题标题】:Can't get rated courses, errors in Laravel无法获得评分课程,Laravel 中的错误
【发布时间】: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

标签: php laravel


【解决方案1】:

我解决了我对课程评分的问题,现在它可以过滤所有内容。

              $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 === null, function ($query) {
            return $query->where('discount', '!=', null);
        })->when($r->rate === true, function ($query) {
            $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);
            $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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-16
    • 2013-06-13
    • 1970-01-01
    • 1970-01-01
    • 2018-09-22
    • 2018-04-26
    • 2014-01-15
    相关资源
    最近更新 更多