可以说我将Posts
和Comments
定义为:
Post.php
public function comments()
{
return $this->hasMany('App\Comment');
}
Comment.php
public function post()
{
return $this->belongsTo('App\Post');
}
我想有效地使用
number of comments
和最后更新的注释的updated_at
列加载Post。我将如何进行?我能想到的最好的方法是将所有注释都加载到Post中,但是将对Comment的选择限制为
post_id
和updated_at
列。然后在视图中计数已加载的注释以获取计数,并使用sortByDesc('updated_at')->first()
以获得最后一列的日期:MyController.php
Post::with([
'comments' => function($q) {
$q->select('post_id','updated_at');
}
])->get();
my_view.blade.php
Comments count: {{ $posts->comments->count() }}
Last comment: {{ $posts->comments->sortByDesc('updated_at')->first()->updated_at }}
有没有一种方法可以更有效地执行此操作,并且仅获取评论数和最新
comments.updated_at
列的值?MySQL或Eloquent解决方案都可以。
谢谢!
最佳答案
您可以使用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 }}
关于mysql - Laravel 5.6-有效获取关系计数和updated_at列的最后一个值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51987689/