我用Laravel。
我的帖子和评论之间有关系。
我有$post
,我想只将值$comments
设置为published
来获得相关的true
。
在控制器中,我有:
$post = Post::find($id);
$comments = $post->comments->where('published', 1)->get();
这里的变量comments
看起来正确,但是当我这样做时:
return [
'comments' => $comments,
'post' => $post,
];
我有来自db的所有评论,并通过一个数组将帖子与评论连接在一起。 例如
$post:
id 24
title "lorem"
body "Lorem ipsum dolor sit amet, consectetur adipisicing elit. Blanditiis explicabo molestias obcaecati placeat vero. Alias aliquid consectetur, deserunt ducimus iure magnam minus molestias neque pariatur quidem sint temporibus totam vitae."
user_id 2
published 1
created_at "2018-12-03 12:14:30"
updated_at "2019-03-29 10:08:26"
comments [
1 [ ... ]
2 [ ... ]
n [ ... ]
]
$comments {
1 [ ... ]
2 [ ... ]
n [ ... ]
}
那我在哪里弄错了?为什么会改变?
模型Comment.php
public function post()
{
return $this->belongsTo(Post::class);
}
public function scopePublished($query)
{
return $query->where('published', 1);
}
Post.php
public function comments()
{
return $this->hasMany(Comment::class);
}
答案 0 :(得分:1)
尝试一下
$post = Post::with(['comments' => function($q) {
$q->where('published', 1); // or $q->published();
}])
->find($id);
在刀片文件中,您可以使用来获取帖子和评论
{{ dd($post) }} //get post
{{ dd($post->comments) }} //get post related commnets
答案 1 :(得分:0)
$comments = $post->comments->where('published', 1)->get();
检查发布的设置为1的帖子。 要获取任何帖子的已发布评论,请在您的Post.php中添加新关系,如下所示:
public function publishedComments()
{
return $this->comments()->where('published', 1);
}
然后您可以像这样在控制器中使用它
$comments = $post->publishedComments()->get();