在关系上雄辩的findOrFail

时间:2018-08-17 02:37:37

标签: laravel eloquent

假设$postPost的雄辩模型,并且有许多Comment相关的模型。

这是帖子模型:

/**
 * Get comments.
 */
public function comments()
{
    return $this->hasMany('App\Models\Comment');
}

我正在尝试通过其id检索属于该帖子的评论。如果存在评论,则运行以下代码将返回评论,但如果该评论属于该帖子(关系),则不会考虑。即使用户不在当前帖子中,这也可以使用户检索评论。

$comment = $post->comments()->findOrFail($commentId);

以下内容首先返回一个集合,然后通过id找到正确的注释。

$comment = $post->comments->find($commentId);

但是,我需要通过查询生成器的findOrFail()方法而不是集合上的find()方法来返回异常,而不是在尝试访问的属性时获取undefined error评论。

2 个答案:

答案 0 :(得分:0)

您可以这样做:

// get Post:
// $post = Post::find($postId);
// get the comment.
$comments = $post->comments()->where('id', $commentId)->get(); // If they are many.
// $comment = $post->comments()->where('id', $commentId)->first(); // If just one.

if (empty($comments)) // 'if($comment)' in case it is just one.
{
    abort(404, 'The comments does not exist.');
}

return view('some.view')->withComments($comments);

然后在您的视图中使用$comments


更新:

尝试一下:

$post->load('comments', function ($query) use ($commentId) {
        $query->findOrFail($commentId);
});

然后:

return view('some.view')->withComments($post->comments);

答案 1 :(得分:0)

尝试更换

message->InitializationErrorString()

使用

$comment = $post->comments()->findOrFail($commentId);

但是,我认为您的注释ID是唯一的,并且无论您是通过透视表还是直接访问它都无所谓...