Laravel中使用old()值做whereIn查询仅返回第一条结果问题求解
问题根因
你的代码中多对old('user_id')做了一层数组包裹,导致传入whereIn的参数结构错误:
old('user_id')本身就是多选表单提交返回的一维数组,结构为[1,2,3]- 你用
[old('user_id')]包裹后,参数变成了二维数组[[1,2,3]],whereIn处理这种结构时只会读取第一个层级的首个元素做匹配,因此仅返回第一条对应结果。
解决方法
直接去掉外层的数组包裹即可,同时可以加默认空数组避免旧值为空时报错:
// 修正后代码 $old_users_id = old('user_id', []); $old_value_users = User::whereIn('id', $old_users_id)->get();
优化建议
可以增加非空判断,避免空数组传入whereIn产生无意义的SQL查询:
$old_value_users = collect(); if (!empty(old('user_id'))) { $old_users_id = old('user_id'); $old_value_users = User::whereIn('id', $old_users_id)->get(); }
内容的提问来源于stack exchange,提问作者user1286956
相关产品推荐
相关产品推荐

