首页 > 解决方案 > 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');
    }

标签: phplaravel

解决方案


要让所有这些都参与响应,有两种方法:

  1. (专业级)您将它们附加到定义端点的响应中。这是有效的方法,因为您将只为您定义的端点使用它们。为此,您在模型中使用属性 $appends,并声明 getUsersAttribute 和 getEventAttribute,它们返回每个带有 get() 的雄辩关系以拥有对象集合而不是构建器。

  2. (普通级别)您可以使用 $with 属性,然后它们将与您请求的模型一起返回

    受保护的 $with = ['event','users'];

使用适当的 laravel 版本检查 Laravel 文档,以了解如何使用我提到的概念。


推荐阅读