laravel 加入两个 table 并根据结果进行 foreach

laravel join two table and foreach on result

我在 laravel 中使用 join 两个表(DB 是辅助数据库。我没有这些表的模型):

$users = DB::connection('mysql2')
                       ->table('users')
                       ->join('usermeta', 'users.id', 'usermeta.user_id')
                       ->select('users.*', 'usermeta.*')
                       ->get();

这是查询的结果:

{
  +"id": 1
  +"user_email": "test@gmail.com"
  +"umeta_id": 502
  +"user_id": 1
  +"meta_key": "first_name"
  +"meta_value": "xxxx"
},
{
  +"id": 1
  +"user_email": "test@gmail.com"
  +"umeta_id": 503
  +"user_id": 1
  +"meta_key": "last_name"
  +"meta_value": "yyyy"
},
{
  +"id": 2
  +"user_email": "test2@gmail.com"
  +"umeta_id": 504
  +"user_id": 2
  +"meta_key": "first_name"
  +"meta_value": "xxxxx"
},
{
  +"id": 2
  +"user_email": "test2@gmail.com"
  +"umeta_id": 505
  +"user_id": 2
  +"meta_key": "last_name"
  +"meta_value": "yyyy"
},

如何在用户上添加 foreach 并显示用户列表(包括名字和姓氏)?

有一种方法可以通过优化 mysql 查询来实现。
这是我使用 php 的回答:

    $check_array = [];
       $output=[];
       foreach ($users as $user){
           if (!in_array($user['user_id'],$check_array)){
               $output[$user['user_id']]['user_id'] = $user['user_id'];
               $output[$user['user_id']]['user_email'] = $user['user_email'];
               $output[$user['user_id']][$user['meta_key']]=$user['meta_value'];
           }else{
               $output[$user['user_id']][$user['meta_key']]=$user['meta_value'];
           }
       }
       dd($output);

输出将如下所示:

array:2 [▼
  1 => array:4 [▼
    "user_id" => 1
    "user_email" => "test@gmail.com"
    "first_name" => "xxxx"
    "last_name" => "yyyy"
  ]
  2 => array:4 [▼
    "user_id" => 2
    "user_email" => "test2@gmail.com"
    "first_name" => "xxxx"
    "last_name" => "yyyy"
  ]
]

然后就可以轻松显示输出了。