Laravel验证规则仅识别属于所选相关模型的ID

时间:2019-11-07 11:43:28

标签: php laravel validation belongs-to validationrules

下面是数据库表的示例。

帖子表:

id       name
1        A
2        B

评论表:

id        post_id       text
1         1             aaaaaaa
2         1             AAAAAAAAAAA
3         2             bbbbbbbbb
4         2             BBBBBBBBBBBB
5         2             b5b5b5b5b

以下是我当前的验证规则。

[
     'post_id' => 'required|exists:posts,id',
     'comment_id => 'required|exists:comments,id',
]

使用上述验证规则,它将验证post_id表的id列中是否存在postscomment_id也是一样。

但是在我的情况下,如果您选择帖子ID = 1,它应该验证comment_id1还是2,因为只有这两个注释属于帖子ID = 1

如果您选择帖子ID = 2,同样如此,它应该验证所选的comment_id是否属于帖子ID = 2

否则,即使comment_id表的id列中确实存在选定的comments,验证也应该失败。

如何在Laravel 5或6中进行此类验证?

2 个答案:

答案 0 :(得分:0)

您好,这是您可以执行的方法。我相信您正在使用Request类 此代码段可以在有或没有Request类的情况下使用

[
     'post_id' => 'required|exists:posts,id',
     'comment_id' => [
        'required',
         Rule::exists('comments')->where(function($query){
                    $query->where('post_id', request()->post_id)
                          ->where('id', request()->comment_id);
}),
]

有关更多信息,请查看文档https://laravel.com/docs/5.7/validation

答案 1 :(得分:0)

'comment_id' => [
        'required',
        Rule::exists('comments')->where(function ($query) use($post_id) {
            $query->where('post_id', $post_id);
        }),
    ],