【问题标题】:Response json in laravellaravel中的响应json
【发布时间】:2020-09-05 02:02:38
【问题描述】:

我在 laravel 框架中有一个四表:

用户: id_user, 电子邮件, 密码, profile_image, 全名, 性别, 年龄, 居住国家, city_if_residence,

事件 id_event, id_user, name_event

MEMBER_EVENTS, 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": []
        }
    ]
}

我想接收所有事件,其中事件中将是属于事件的所有用户, 创建事件的用户的数据。例如:

{
    "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');
    }

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    你们的关系不正确。

    事件应该有方法

    public function users()
    {
        return $this->hasMany(User::class);
    }
    

    在用户中

    public function event()
    {
        return $this->belongsTo(Event:class);
    }
    

    https://laravel.com/docs/7.x/eloquent-relationships#one-to-many

    【讨论】:

    • 我在 table user 和 event 之间建立了更多的关系。我有一个连接表 member_events ,因为我创建了 belongsToMany 方法。
    【解决方案2】:

    要让所有这些都出现在响应中,有两种方法:

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

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

      protected $with = ['event','users'];

    检查 Laravel 文档和你的适当 laravel 版本,看看如何使用我提到的概念。

    【讨论】:

      猜你喜欢
      • 2018-01-14
      • 2014-04-16
      • 2021-06-05
      • 2015-10-30
      • 2014-11-11
      • 2015-05-17
      • 2020-03-04
      • 2017-09-24
      • 1970-01-01
      相关资源
      最近更新 更多