Php 帖子返回的次数与评论存在的次数相同。我怎样才能解决这个问题?

Php 帖子返回的次数与评论存在的次数相同。我怎样才能解决这个问题?,php,laravel,vue.js,lumen,Php,Laravel,Vue.js,Lumen,我正在使用lumen和Vuejs,并将我的“喜欢”和“评论”表与我的帖子表一起加入。喜欢的人没有问题,很好用。 但是,当我加入comments表时,返回帖子的次数与存在评论的次数相同 if($request->limit == NULL){ $request->limit = 4; } $user_name= $request->username; $post_id = $request->id; $u

我正在使用lumen和Vuejs,并将我的“喜欢”和“评论”表与我的帖子表一起加入。喜欢的人没有问题,很好用。 但是,当我加入comments表时,返回帖子的次数与存在评论的次数相同

 if($request->limit == NULL){
        $request->limit = 4;
      }

      $user_name= $request->username;
      $post_id = $request->id;

      $user = User::where('username', $user_name)->first();

      $post_query = Posts::leftJoin('likes', 'posts.id', '=', 'likes.post_id')
                   ->leftJoin('comments', 'posts.id', '=', 'comments.post_id')
                      ->selectRaw('posts.*, count(likes.post_id) as likes')
                   ->selectRaw('posts.*, comments.comment as comment')
                      ->where('posts.user_id', $user->id)
                      ->groupBy('posts.id')
                   ->groupBy('comments.id')
                      ->orderBy('id', 'desc')
                      ->limit($request->limit)
                      ->get();

      return response()->json($post_query);
我的代码输出为:

{
    "id": 844,
    "user_id": 221,
    "content": "Das ist mein aller erster Post :) ",
    "created_at": "2019-07-01 09:09:00",
    "updated_at": "2019-07-01 09:09:00",
    "likes": 1,
    "comment": "Das ist der zweite Kommentar"
},
{
    "id": 844,
    "user_id": 221,
    "content": "Das ist mein aller erster Post :) ",
    "created_at": "2019-07-01 09:09:00",
    "updated_at": "2019-07-01 09:09:00",
    "likes": 1,
    "comment": "das ist der dritte :) "
}
但我想做的是:

{
    "id": 844,
    "user_id": 221,
    "content": "Das ist mein aller erster Post :) ",
    "created_at": "2019-07-01 09:09:00",
    "updated_at": "2019-07-01 09:09:00",
    "likes": 1,
    "comments": {
      {
        'username' : 'test',
        'comment' : "Das ist der zweite Kommentar",
        'created_at': 12312312
      },
      {
        'username' : 'test',
        'comment' : "Das ist der dritte :)",
        'created_at': 12312312
      }
    }
}

你知道我该怎么做吗?

你可以使用以下定义的雄辩:

Post.php

class Post extends Model {

    public function comments()
    {
        return $this->hasMany(Comment::class);
    }

    public function likes()
    {
        return $this->hasMany(Like::class);
    }
}
然后在您的查询中:

$posts = Post
             ::with('comments') // Eager loading the 'comments' relationship
             ->withCount('likes') // Attaching a 'likes_count' to every Post object
             ->orderBy('id', 'desc')
             ->limit($request->limit)
             ->get(); // executing the query
这将输出如下结果:

{
    "id": 844,
    "user_id": 221,
    "content": "Das ist mein aller erster Post :) ",
    "created_at": "2019-07-01 09:09:00",
    "updated_at": "2019-07-01 09:09:00",
    "likes_count": 1,
    "comments": {
      {
        'username' : 'test',
        'comment' : "Das ist der zweite Kommentar",
        'created_at': 12312312
      },
      {
        'username' : 'test',
        'comment' : "Das ist der dritte :)",
        'created_at': 12312312
      }
    }
}
在文档中签入与此解决方案相关的主题:


您是否拥有在Laravel中定义的这些模型之间的关系?这实际上是正常的SQL行为。如果您确实想使用Elounce,我相信默认情况下Lumen中不会启用它。要使用它,您需要在bootstrap/app.php文件中取消$app->withelount()调用的注释。@skribe是的,您完全正确。完全错过了。接得好。