是在laravel中从数据库获取数据的更优化的方式



我正在一个新闻网站上工作,在主页上我必须从每个类别中显示3个项目,并且有20个类别。我试过的:

$politicals = News::whereHas('categories', function ($q) {
$q->where('categories.slug','politics');
})->orderBy('created_at','desc')->take(3)->get();
$economical = News::whereHas('categories', function ($q) {
$q->where('categories.slug','economical');
})->orderBy('created_at','desc')->take(3)->get();
$conversation = News::whereHas('categories', function ($q) {
$q->where('categories.slug','conversation');
})->orderBy('created_at','desc')->take(3)->get();
$socialMedia = News::whereHas('categories', function ($q){
$q->where('categories.slug','socialMedia');
})->orderBy('created_at','desc')->take(3)->get();

考虑我在类别上有一个manyToMany关系,如果新闻的数量很高,比如2000个新闻,我认为主页会很慢,我认为我不能使用cache,因为新闻每5分钟或更长时间改变一次。所以我想知道是否有更好的方法来做一些像我这样的可重复查询。提前感谢

您可以像这样编写查询

$news = Category::with(['news' => function($q){
$q->take(3);
}])->get();

这个查询将为您提供所有类别和每个类别3个新闻

您还需要定义模型中的关系

在Category.php

public function news()
{
return $this->belongsToMany(News::class);
}

最新更新