You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel中Eloquent配合Eager Loading使用WHERE IN查询文章不生效如何解决?

Laravel预加载筛选分类查询异常修复方案

核心错误点

  • 方法名拼写错误:Laravel查询构造器的IN条件方法为驼峰格式whereIn,你代码中使用全小写的wherein会触发方法不存在报错
  • 未执行查询操作:你构造完查询构造器后没有调用执行方法,返回的是构造器对象而非实际数据集
  • 未校验参数格式:whereIn要求第二个参数必须为数组,若前端传入的分类参数为字符串、null等非数组格式,会触发参数类型错误

修正后代码

// 读取分类参数,默认值设为空数组,避免null判断
$categories = $request->input('categories', []);
// 若前端可能传入逗号分隔的字符串ID,可新增以下转换逻辑
// $categories = is_string($categories) ? explode(',', $categories) : $categories;

$articles = Article::select(['id','title','published_date','cover_image','slug','keywords','meta_description','language','author_id','editor_id','category_id','status_id'])
    ->with(['category:id,category_name','language:id,language_name','status:id,status_name','editor:id,name','author:id,name'])
    // 仅当分类参数非空时追加IN条件,简化if分支写法
    ->when(!empty($categories), function ($query) use ($categories) {
        return $query->whereIn('category_id', $categories);
    })
    // 执行查询返回结果集,需要分页可替换为->paginate(10)
    ->get();

修改说明

  1. 修正wherein为标准驼峰写法whereIn,符合Laravel的语法规范
  2. 末尾新增get()方法触发SQL执行,直接返回可遍历的文章集合数据
  3. 优化参数读取逻辑,默认值设为空数组,避免多余的null判断
  4. 可选使用when方法简化条件分支,代码可读性更高

内容的提问来源于stack exchange,提问作者Kanchana Kariyawasam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 19:45:03