Laravel项目按升序展示数据失败问题求助
问题分析与修正方案
你的代码存在几个关键问题,导致无法按预期实现升序排序并返回JSON:
错误点说明
all()方法误用:Course::all()会立即执行查询并返回Eloquent集合,集合对象没有paginate()方法,这会直接抛出错误。应该直接使用查询构造器链式调用,无需先调用all()。- 排序逻辑位置错误:
orderBy('id', 'asc')和get()被放在response()->json()之后,但response()->json()返回的是JsonResponse实例,不存在这些方法,排序逻辑完全没有生效。 - SQL注入风险:直接拼接
"%$keyword%"到查询语句中,存在SQL注入隐患,应该使用更安全的查询方式。
修正后的代码
$keyword = $request->get('search'); $perPage = 25; // 初始化查询构造器,提前添加升序排序规则 $query = Course::query()->orderBy('id', 'asc'); if (!empty($keyword)) { // 安全添加模糊查询条件 $query->where('name', 'LIKE', "%{$keyword}%"); } // 执行分页查询 $courses = $query->paginate($perPage); // 返回JSON格式的分页结果 return response()->json($courses);
关键修正细节
- 基础查询构造器初始化:用
Course::query()创建查询构造器,提前加入orderBy('id', 'asc'),确保所有查询结果都按id升序排列。 - 条件查询链式处理:根据搜索关键词动态添加
where条件,全程使用查询构造器链式调用,避免提前执行查询导致的方法调用错误。 - 安全分页与返回:通过
paginate($perPage)获取分页结果集,直接传入response()->json()即可,Laravel会自动将分页对象序列化为包含数据、分页信息的标准JSON结构。
内容的提问来源于stack exchange,提问作者John Peter
相关产品推荐
相关产品推荐

