php - laravel中的响应json
问题描述
我在 laravel 框架中有一个四表:
用户:id_user、电子邮件、密码、profile_image、全名、性别、年龄、居住国家、city_if_residence、
事件 id_event、id_user、name_event
成员事件,id_member,id_user,id_event,
存储 id_storage、id_event、name_storage、
我有一个响应 json :
{
"success": true,
"event": [
{
"id_event": 1,
"id_user": 1,
"name_event": "new event",
"place_event": "Chocen, wladyslawa lokietka 424",
"time_event": "19:00",
"description": "description",
"first_storage_file": "1598548420.jpg",
"longitude": "124124",
"latitude": "12312.123123",
"storage_file": 1,
"storage": [
{
"id_storage": 1,
"id_event": 1,
"storage_file_title": "profile.jpg",
"created_at": null,
"updated_at": null
}
]
},
{
"id_event": 2,
"id_user": 1,
"name_event": "new event",
"place_event": "Chocen, wladyslawa lokietka 424",
"time_event": "19:00",
"description": "description",
"first_storage_file": "1598551003.jpg",
"longitude": "124124",
"latitude": "12312.123123",
"storage_file": 0,
"storage": []
}
]
}
我想接收所有事件,其中 In events 将是属于 events 的所有用户,以及创建事件的用户的 Data。例如 :
{
"success": true,
"event": [
{
"id_event": 1,
"id_user": 1,
"name_event": "new event",
"place_event": "Chocen, wladyslawa lokietka 424",
"time_event": "19:00",
"description": "description",
"first_storage_file": "1598548420.jpg",
"longitude": "124124",
"latitude": "12312.123123",
"storage_file": 1,
"storage": [
{
"id_storage": 1,
"id_event": 1,
"storage_file_title": "profile.jpg",
"created_at": null,
"updated_at": null
}
]
"users_member": [
{
"id_user": 1,
"email": 1,
"profile_image": "profile.jpg",
"fullname": null,
"age": null
"gender": null
}
{
"id_user": 1,
"email": 1,
"profile_image": "profile.jpg",
"fullname": null,
"age": null
"gender": null
}
{
"id_user": 1,
"email": 1,
"profile_image": "profile.jpg",
"fullname": null,
"age": null
"gender": null
}
]
"user_created_event": [
{
"id_user": 1,
"email": 1,
"profile_image": "profile.jpg",
"fullname": null,
"age": null
"gender": null
}
]
},
{
"id_event": 2,
"id_user": 1,
"name_event": "new event",
"place_event": "Chocen, wladyslawa lokietka 424",
"time_event": "19:00",
"description": "description",
"first_storage_file": "1598551003.jpg",
"longitude": "124124",
"latitude": "12312.123123",
"storage_file": 0,
"storage": []
}
]
}
我在 laravel 中创建了关系。
用户型号:
public function event(){
return $this->belongsToMany(Event::class,'member_events', 'id_user', 'id_event');
//return $this->belongsToMany(Event::class,'member_events', 'id_event', 'id_event', 'id_event')->withTimestamps();
}
事件模型
public function storage(){
return $this->hasMany(StorageEvent::class, 'id_event');
}
public function user(){
//return $this->belongsToMany(User::class,member_events, 'id_user', 'id_user')->withTimestamps();
return $this->belongsToMany(User::class,'member_events', 'id_event', 'id_user');
}
解决方案
要让所有这些都参与响应,有两种方法:
(专业级)您将它们附加到定义端点的响应中。这是有效的方法,因为您将只为您定义的端点使用它们。为此,您在模型中使用属性 $appends,并声明 getUsersAttribute 和 getEventAttribute,它们返回每个带有 get() 的雄辩关系以拥有对象集合而不是构建器。
(普通级别)您可以使用 $with 属性,然后它们将与您请求的模型一起返回
受保护的 $with = ['event','users'];
使用适当的 laravel 版本检查 Laravel 文档,以了解如何使用我提到的概念。