Как в валидации проверить существует ли такой id в другой таблице?

В Laravel, чтобы проверить, существует ли определенное значение в другой таблице при выполнении валидации, можно использовать правило exists. Правило exists позволяет проверить, существует ли запись с определенным значением в заданной таблице и столбце.

Для примера рассмотрим ситуацию, когда нужно проверить, существует ли определенный id в таблице users. Допустим, у нас есть модель User для таблицы users. В модели User мы должны определить правило валидации для проверки существования id в таблице users.

use IlluminateValidationRule;

class User extends Model
{
    public function rules()
    {
        return [
            'other_table_id' => [
                'required',
                Rule::exists('other_table', 'id'),
            ],
        ];
    }
}

В приведенном примере валидации для поля other_table_id, мы используем правило exists, чтобы проверить существование значения в таблице other_table в столбце id. В данном случае, поле other_table_id должно быть обязательным и существовать в таблице other_table.

Однако, чтобы exists правило работало, в модели User должен быть настроен соответствующий подключение к базе данных и связь с таблицей other_table.

Также, обратите внимание, что вы можете добавить другие правила валидации для поля other_table_id, если необходимо. Например, вы можете добавить правило integer, чтобы убедиться, что переданное значение является целым числом.

Дополнительно, если вы хотите настроить сообщение об ошибке для правила exists, вы можете определить пользовательское сообщение с помощью функции messages() в своей модели:

use IlluminateValidationRule;

class User extends Model
{
    public function rules()
    {
        return [
            'other_table_id' => [
                'required',
                Rule::exists('other_table', 'id'),
            ],
        ];
    }

    public function messages()
    {
        return [
            'other_table_id.exists' => 'Поле other_table_id недействительно.',
        ];
    }
}

В приведенном примере, если значение other_table_id отсутствует в таблице other_table, будет выводиться сообщение "Поле other_table_id недействительно."

Это дает вам возможность проверять существование id в другой таблице при выполнении валидации в Laravel.