Правила проверки Laravel только идентификаторы, которые принадлежат выбранной связанной модели - PullRequest
0 голосов
/ 07 ноября 2019

Ниже приведен пример таблиц базы данных.

таблица сообщений:

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 таблицы posts. То же самое для comment_id.

Но в моем случае, если вы выберете post id = 1, он должен проверить, если comment_id равен 1 или 2, потому что только эти два комментария принадлежатИД записи = 1.

То же самое, если вы выберете ИД записи = 2, оно должно быть проверено, если выбранный comment_id принадлежит идентификатору записи = 2.

В противном случае проверка должна завершиться неудачей, даже если выбранный comment_id действительно существует в столбце id таблицы comments.

Как выполнить такую ​​проверку в Laravel 5 или 6?

Ответы [ 2 ]

0 голосов
/ 07 ноября 2019
'comment_id' => [
        'required',
        Rule::exists('comments')->where(function ($query) use($post_id) {
            $query->where('post_id', $post_id);
        }),
    ],
0 голосов
/ 07 ноября 2019

Привет, вот как ты можешь это сделать. Я полагаю, что вы используете класс 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

...