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"
]
]
然后就可以轻松显示输出了。
我在 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"
]
]
然后就可以轻松显示输出了。