"flatten" collection "With('model')"
"flatten" collection "With('model')"
一段时间以来,我一直在努力解决这个问题,在“https://laravel.com/docs/8.x/collections" 但似乎没有任何效果。
除了执行 foreach 并创建一个新数组(超级 sub-optimal);必须有更好的方法...对吗?
注意:我已经阅读了所有类似问题的答案,没有任何效果
这是我的查询:
$users = User::where('active',1)
->whereHas('role', function ($query) use ($column, $role){
$query->where('role_'.$column, $role);
})
->with('role:id,role_name,role_category')
->orderBy('users.id')
->get([
'id',
'email',
'phone_number',
'id_role',
'firstname',
'lastname',
'verified',
'active',
'id_configuration',
'external_service_id',
]);
我得到这个输出:
[{
"id": 968,
"email": "user@admin.com",
"phone_number": "123",
"id_role": 4,
"firstname": "Name",
"lastname": "TEST User",
"verified": 0,
"active": 1,
"id_configuration": 1,
"external_service_id": 123,
"role": {
"id": 4,
"role_name": "Admin",
"role_category": "Company"
}
}]
但我需要 return 的输出是这样的:
[{
"id": 968,
"email": "user@admin.com",
"phone_number": "12312",
"id_role": 4,
"firstname": "Admin",
"lastname": "TEST User",
"verified": 0,
"active": 1,
"id_configuration": 1,
"external_service_id": 123,
"role_name": "Admin",
"role_category": "Company"
}]
您可以使用修改器将这些属性添加到模型中
https://laravel.com/docs/8.x/eloquent-mutators
假设每个用户只有一个角色,那么在User模型中添加
public function getRoleNameAttribute($value)
{
return $this->role->role_name;
}
如果此 属性 始终是必需的,那么您可以向用户模型添加附加 属性
https://laravel.com/docs/8.x/eloquent-serialization#appending-values-to-json
protected $appends = ['role_name'];
如果没有,那么返回模型时可以使用append
https://laravel.com/docs/8.x/eloquent-serialization#appending-at-run-time
return $user->append('role_name')->toArray();
一段时间以来,我一直在努力解决这个问题,在“https://laravel.com/docs/8.x/collections" 但似乎没有任何效果。
除了执行 foreach 并创建一个新数组(超级 sub-optimal);必须有更好的方法...对吗?
注意:我已经阅读了所有类似问题的答案,没有任何效果
这是我的查询:
$users = User::where('active',1)
->whereHas('role', function ($query) use ($column, $role){
$query->where('role_'.$column, $role);
})
->with('role:id,role_name,role_category')
->orderBy('users.id')
->get([
'id',
'email',
'phone_number',
'id_role',
'firstname',
'lastname',
'verified',
'active',
'id_configuration',
'external_service_id',
]);
我得到这个输出:
[{
"id": 968,
"email": "user@admin.com",
"phone_number": "123",
"id_role": 4,
"firstname": "Name",
"lastname": "TEST User",
"verified": 0,
"active": 1,
"id_configuration": 1,
"external_service_id": 123,
"role": {
"id": 4,
"role_name": "Admin",
"role_category": "Company"
}
}]
但我需要 return 的输出是这样的:
[{
"id": 968,
"email": "user@admin.com",
"phone_number": "12312",
"id_role": 4,
"firstname": "Admin",
"lastname": "TEST User",
"verified": 0,
"active": 1,
"id_configuration": 1,
"external_service_id": 123,
"role_name": "Admin",
"role_category": "Company"
}]
您可以使用修改器将这些属性添加到模型中 https://laravel.com/docs/8.x/eloquent-mutators
假设每个用户只有一个角色,那么在User模型中添加
public function getRoleNameAttribute($value)
{
return $this->role->role_name;
}
如果此 属性 始终是必需的,那么您可以向用户模型添加附加 属性 https://laravel.com/docs/8.x/eloquent-serialization#appending-values-to-json
protected $appends = ['role_name'];
如果没有,那么返回模型时可以使用append
https://laravel.com/docs/8.x/eloquent-serialization#appending-at-run-time
return $user->append('role_name')->toArray();