获取具有关系的嵌套 json 数据数组 Laravel Eloquent 模型

Par*_*tti 6 mysql database laravel eloquent laravel-5

我正在使用 laravel 制作社交网络,我想在具有嵌套关系的单个数组中显示“'post''comments''comment_by'用户信息

这是我的类和数据库结构

表名字段

会员

         ID => primary key,
         name,
         email
Run Code Online (Sandbox Code Playgroud)

帖子

         ID => primary key,
         postText
         fromUserId => foreign key (Members-id)
Run Code Online (Sandbox Code Playgroud)

评论

         commentText ,
         onPostId = > foreign key (Post-id)
         fromUserId = > foreign key (Members-id)
Run Code Online (Sandbox Code Playgroud)

雄辩模型

  1. 会员.php

    类成员扩展模型 { // }

  2. 帖子.php

    class post 扩展模型 { // public $timestamps = true;

    函数 getUserDetails() { return $this->belongsTo('App\Member', 'fromUserId', 'id'); }

    函数 getCommentDetails() { return $this->hasMany('App\comment', 'onPostId', 'id'); }

    }

3.评论.php

class comment extends Model
  {


  }
Run Code Online (Sandbox Code Playgroud)

调用获取数组

 $posts=post::with('getUserDetails','getCommentDetails')->get();
Run Code Online (Sandbox Code Playgroud)

*预期输出

{  
   "id":1,
   "postType":1,
   "postText":"my name is parth",
   "url":null,
   "likesCount":0,
   "unlikesCount":0,
   "shareCount":0,
   "commentsCount":0,
   "thumbUrl":null,
   "accessMode":1,
   "fromUserId":1,
   "isAdult":1,
   "created_at":null,
   "updated_at":null,
   "get_user_details":{  
      "id":1,
      "name":"parth",
      "email":"parthbhatti95@gmail.com",
      "password":"parth123456",
      "remember_token":"e1b28a30ab467c52924df64034c386d4",
      "created_at":null,
      "updated_at":null
   },
   "get_comment_details":[  
      {  
         "id":1,
         "commentsText":"dccd",
         "onPostId":1,
         "fromUserId":1,
         "created_at":"2017-05-25 16:44:51",
         "updated_at":null
         "commented_by":{  
               "id":1,
               "name":"parth",
               "email":"parthbhatti95@gmail.com",
               "password":"parth123456",
               "remember_token":"e1b28a30ab467c52924df64034c386d4",
               "created_at":null,
               "updated_at":null
             },
      },
      {  
         "id":3,
         "commentsText":"second comment",
         "onPostId":1,
         "fromUserId":1,
         "created_at":"2017-05-26 09:40:51",
         "updated_at":null
         "commented_by":{  
               "id":1,
               "name":"parth",
               "email":"parthbhatti95@gmail.com",
               "password":"parth123456",
               "remember_token":"e1b28a30ab467c52924df64034c386d4",
               "created_at":null,
               "updated_at":null
             },
      },
      {  
         "id":4,
         "commentsText":"second comment",
         "onPostId":1,
         "fromUserId":1,
         "created_at":"2017-05-26 09:41:16",
         "updated_at":null
         "commented_by":{  
               "id":1,
               "name":"parth",
               "email":"parthbhatti95@gmail.com",
               "password":"parth123456",
               "remember_token":"e1b28a30ab467c52924df64034c386d4",
               "created_at":null,
               "updated_at":null
             },
      },
      {  
         "id":5,
         "commentsText":"third one",
         "onPostId":1,
         "fromUserId":1,
         "created_at":"2017-05-26 09:41:43",
         "updated_at":null
         "commented_by":{  
               "id":1,
               "name":"parth",
               "email":"parthbhatti95@gmail.com",
               "password":"parth123456",
               "remember_token":"e1b28a30ab467c52924df64034c386d4",
               "created_at":null,
               "updated_at":null
             },
      }
   ]
}
Run Code Online (Sandbox Code Playgroud)

San*_*esh 2

根据您的评论,只需将commentedBy关系添加到您的Member模型中并立即加载它。

在评论模型中。

public function commentedBy()
{
    return $this->belongsTo('App\Member', 'fromUserId', 'id');
}
Run Code Online (Sandbox Code Playgroud)

然后像这样急切地加载关系。

$posts = post::with('getUserDetails','getCommentDetails.commentedBy')->get();
Run Code Online (Sandbox Code Playgroud)