Laravel中根据多选框值执行数据库查询的问题
问题分析与解决方案
原代码存在的问题
- 循环遍历
$notifyTo数组时,每次都会覆盖$user变量,最终只能得到最后一个company_id对应的用户数据,无法获取所有选中公司的用户。 - 使用
User::all()->where(...)是先查询所有用户到内存中再过滤,数据量大时性能极差,应直接在数据库层面完成筛选。
正确实现代码
$data = $request->all(); $notifyTo = $data['notify_to']; // 多选框提交的company_id数组 // 数据库层面直接筛选:company_id在目标数组中且status=1的用户 $users = User::whereIn('company_id', $notifyTo) ->where('status', 1) ->get(); print_r($users); exit;
代码说明
whereIn('company_id', $notifyTo):直接在数据库中匹配company_id属于$notifyTo数组的记录,避免循环多次查询数据库。where('status', 1):附加状态为1的筛选条件。get():执行查询并返回符合条件的用户集合。
这种方式既能一次性获取所有符合要求的用户数据,还能大幅提升查询效率,避免不必要的内存消耗和重复数据库请求。
内容的提问来源于stack exchange,提问作者Ajith Vinayak
相关产品推荐
相关产品推荐

