获取laravel中相关模型的数量

问题描述 投票:1回答:1

假设我需要获得一个包含评论数的帖子。当然,有许多方法可以做到这一点。最佳(或首选)方式是什么?

  1. Eager Load +然后将路径模型绑定到每当在路径中注入模型时就获得计数。
class Post extends Model {

    protected $withCount = [ 'comments' ];

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

}
Route::get('/posts/{post}', function (App\Post $post) {

    return $post;  // $post→comments_count gives count.

} 
  1. 缓存计数
public function getCachedCommentsCountAttribute()
{
    return Cache::remember($this->getTable() . '.' . $this->getKey() . '.comments_count', 60*60*24, function () {
        return $this->comments()->count();  // posts.{id}.comments_count
    }); 
}

  1. 其他

什么是最佳性能明智的选择?

laravel eloquent laravel-query-builder
1个回答
0
投票

为什么不都?您可以将计数缓存更短的时间,然后,当缓存过期时,只需执行查询即可获取更新的计数。

您还可以通过使用Eloquent Observers永久缓存计数来使此方法有所调整,并且仅在插入或删除注释时才使缓存无效。如果您知道仅将使用Eloquent方法来插入或删除注释,则可以使用此方法。例如,如果您进行批量插入或执行原始查询以删除评论,则不会触发事件。

© www.soinside.com 2019 - 2024. All rights reserved.