@skliche Thanks once again; however, this method still executes more queries than needed. 4 queries to be exact:
- 1 to get the post
- 2 to get its author
- 3 to get comments
- 4 to get its authors
Currently, this is what I am using, and it uses 2 queries exactly:
$post = \DB::table('posts as p')
->join('users as u', 'u.id', '=', 'p.user_id')
->where('p.id', '=', $id)
->select('p.*', 'u.nickname', 'u.role_id', 'u.posts as u_posts', 'u.comments as u_comments', 'u.likes as u_likes')
->take(1)->get()->toArray();
$post = $post[0];
$comments = \DB::table('comments as c')
->join('posts as p', 'p.id', '=', 'c.post_id')
->join('users as u', 'u.id', '=', 'c.user_id')
->where('p.id', '=', $id)
->select('c.*', 'u.nickname', 'u.posts as u_posts', 'u.comments as u_comments', 'u.likes as u_likes')
->take(20)->get()->toArray();
return view('forum.posts.index', compact('post', 'comments'));
It doesn't look pretty, but it does exactly what I need - two queries with all the inner joins and stuff. The only question is how can I make it more compact in the code...