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

Laravel中如何按指定用户名数组筛选Form对象集合

问题解答:获取指定用户数组对应的Form对象

问题描述

  • 开发环境:PHP + Laravel
  • 需求:获取所有userName属于指定用户数组的Form对象
  • 示例数据:
    • 用户数组:$users = ["name1", "name2","name4"]
    • Forms数组:
      $Forms = [
          {_id: 1, title : "title1", userName : "name1" },
          {_id: 2, title : "title2", userName : "name2" },
          {_id: 3, title : "title3", userName : "name3" },
          {_id: 4, title : "title4", userName : "name4" },
          {_id: 5, title : "title5", userName : "name1" }
      ]
      
  • 当前实现代码:
    foreach ($users  as $user) { 
        $allForm = Forms::where('userName ', $user)->get();  
    };
    
  • 问题:仅获取到第一个用户(name1)的2个对象,无法获取name2、name4对应的Form对象

解决方案

你现在的问题有两个:

  1. 循环里每次都会用新的查询结果覆盖$allForm变量,哪怕循环正常执行,最后也只会保留最后一次查询的结果;
  2. where条件里的字段名'userName '多了个空格,数据库字段名应该是userName,带空格会导致后续循环的查询匹配不到数据,所以只拿到了第一次循环的结果。

最推荐的解决方法是直接用Laravel的whereIn方法,一次性查询所有符合条件的数据,效率更高代码也更简洁:

$users = ["name1", "name2","name4"];
$allForm = Forms::whereIn('userName', $users)->get();

这个方法会生成WHERE userName IN ('name1', 'name2', 'name4')的SQL语句,一次性把所有目标Form对象查出来。

如果非要用循环实现(不建议,多次查询数据库会降低性能),需要把每次查询的结果合并起来,而不是覆盖变量:

$users = ["name1", "name2","name4"];
$allForm = collect(); // 用Laravel集合来存储结果,方便合并
foreach ($users as $user) { 
    // 注意去掉字段名里的多余空格
    $userForms = Forms::where('userName', $user)->get();
    $allForm = $allForm->merge($userForms);
};
// 如需转成数组可以用all()方法
$allForm = $allForm->all();

内容的提问来源于stack exchange,提问作者Elodie Muller

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 19:10:47