laravel5.6-高效获取关系计数和列上更新的\u的最后一个值

jxct1oxe  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(295)

假设我有 Posts 以及 Comments 定义为:
邮政.php

public function comments()
{
  return $this->hasMany('App\Comment');
}

注解.php

public function post()
{
  return $this->belongsTo('App\Post');
}

我想有效地装载邮件 number of comments 以及 updated_at 上次更新的注解的列。我该怎么办?
我能想到的最好办法是加载带有所有注解的post,但将select on注解限制为 post_id ,和 updated_at 柱。然后在视图中对加载的注解进行计数以获得计数并使用 sortByDesc('updated_at')->first() 要获取最后一列的日期:
mycontroller.php

Post::with([
  'comments' => function($q) {
    $q->select('post_id','updated_at');
  }
])->get();

我的\视图.blade.php

Comments count: {{ $posts->comments->count() }}
Last comment: {{ $posts->comments->sortByDesc('updated_at')->first()->updated_at }}

有没有一种方法可以更有效地做到这一点,只得到评论和最新的价值计数 comments.updated_at 列?
mysql或雄辩的解决方案是可以的。
谢谢!

4ioopgfo

4ioopgfo1#

你可以通过 withCount() :

Post::withCount([
    'comments',
    'comments as last_comment' => function($q) {
        $q->select(DB::raw('max(updated_at)'));
    }
])->get();

Comments count: {{ $post->comments_count }}
Last comment: {{ $post->last_comment }}

相关问题