对Laravel中的每个帖子的评论限制(与帖子模型有很多关系)
我想限制laravel中的hasMany关系,但不是每个帖子都限制整个或全部记录。以下是我的解释代码。对Laravel中的每个帖子的评论限制(与帖子模型有很多关系)
class Post extends Model {
protected $table = "user_posts";
protected $appends = ['logged_in_user_id', 'comments_count'];
public function user() {
return $this->belongsTo('App\User');
}
public function comments() {
return $this->hasMany('App\Comment')->take(2);
}
}
我试图让最近2或3的评论每篇文章如下
$posts = \App\Post::orderBy('updated_at', 'DESC')->with('comments')->where('user_posts.user_id', $user_id)->paginate(10);
问题是不是给每个职位2评论,它给所有的取出后只有2个评论。
当前的结果:
POST1:
- 注释1个
- 评论2
POST2: 暂无评论在后2加载,因为它限制了整体。
预期:
POST1:
- 评论1
- 评论2
POST2:
- 评论1
- 评论2
我已经做了类似的事情之前,试试这个,而不是
public function comments(){
return $this->hasMany(Comment::class, 'post_id')->latest()->limit(4);
}
您还可以添加一个全球范围桩模型,所以它总是渴望装载4条评论像所以:
static::addGlobalScope('comments', function ($builder){
$builder->with('comments');
});
所以在你的post.php中的引导方法应该是这样的:
protected static function boot()
{
parent::boot();
static::addGlobalScope('comments', function ($builder){
$builder->with('comments');
});
}
因此,你可以查询,像这样:
$posts = \App\Post::orderBy('updated_at', 'DESC')->where('user_posts.user_id', $user_id)->paginate(10);
UPDATE:
它不工作,当我们查询这样
$posts = \App\Post::orderBy('updated_at', 'DESC')->where('user_posts.user_id', $user_id)->paginate(10);
因为限制适用只有一次。检查github问题https://github.com/laravel/framework/issues/4835。但是这里有一个可能的解决方案https://softonsofa.com/tweaking-eloquent-relations-how-to-get-n-related-models-per-parent/
希望它能帮助:)
感谢您的回复,但它也是一样的。我有5个职位,每个人都有评论,但它只加载4条评论的所有5个相应的职位......它应该已经加载4评论每5个职位 –
@SainishMomin嗯,这很奇怪,什么是外交钥匙的职位评论表? –
post_id是评论表中的外键 –
试试这个'\软件\邮政::排序依据( '的updated_at', 'DESC') - >用([ '意见'=>函数($ q){ $ q-> take(2); }]) - > get();'! – Maraboc
我试过,但我给出了相同的结果 –
明显的问题post2有评论? – Maraboc