大家好我正在使用Laravel 5.6我在数据库中有三个表帖子,评论和回复以及三个模型帖子,评论,回复
关系如下一篇文章有很多评论,一篇评论有很多回复。我创建了一个路由,当命中时会返回一些数据;但是,我希望这个数据以特定的方式读取这个例子:
让我说我的数据库中有6个帖子,每个帖子有6个评论,每个评论有6个回复我想只返回前3个帖子以及每个帖子的前3个评论也是每个评论的前3个回复
//this is a function inside a controller
//and for sure I have make sure to make use of the models namespaces
public function test(){
$posts = Post::with(['comments' => function($data){
return $data->take(3);
},
'comments.replies' => function($data){
return $data->take(3);
}])->paginate(3);
//returning the posts
return $posts
}
这种方式正在工作它返回前3个帖子并且它返回前3个评论和前3个回复仅针对第一个帖子但是对于其他帖子我只得到评论的空键,因此没有答复作为结果< / p>
希望你能得到我的问题,请帮忙 对不起大问题 提前谢谢。
答案 0 :(得分:0)
Laravel中没有对此的本地支持。
我为此创建了一个包:https://github.com/staudenmeir/eloquent-eager-limit
在父模型和相关模型中都使用HasEagerLimit
特性。
class Post extends Model {
use \Staudenmeir\EloquentEagerLimit\HasEagerLimit;
}
class Comment extends Model {
use \Staudenmeir\EloquentEagerLimit\HasEagerLimit;
}
然后,您可以将->take(3)
应用于您的关系。
答复也一样。