class Category extends Model {
public function posts()
{
return $this->hasMany('App\Models\Post');
}
public function limitPosts()
{
return $this->hasMany('App\Models\Post')
->limit(3);
}
public function limitLatestPosts()
{
return $this->hasMany('App\Models\Post')
->orderBy('created_at', 'desc'). // or use ->latest()
->limit(3);
}
}
它是这样使用的:
Category::query()
->with(['limitPosts' => function($query) {
$query->orderBy('created_at', 'desc'); // the last records
}])
->where('id', '<=', 3) // id not higher than 3
->get();
或者
Category::query()
->with('limitLatestPosts')
->where('id', '<=', 3) // id not higher than 3
->get();
2条答案
按热度按时间8cdiaqws1#
你应该按照update_at降序排列你的完整查询,只有在你可以得到前3个之后。
您的Categories表似乎与posts表不同,因此当创建或更新帖子时,您还应该将其类别的update_at设置为now。
0ve6wy6x2#
据我所知你不能把take()或limit()用在()里面;
编辑:由Sardov先生选择的解决方案是使用staudenmeir/elaborent-eager-limit软件包。在此答案下方提供了链接。
所以对于你需要做的就是通过限制它来脱离模型关系。
例如:
它是这样使用的:
或者
希望这能帮到你。