Laravel проверка для двух столбцов с одинаковым значением существует в таблице - PullRequest
0 голосов
/ 21 января 2020

Фактический сценарий: я должен проверить, существуют ли два одинаковых значения столбца в таблице или нет. Например, сначала я ввожу user_id = 1 и rv_id = 2

Я не должен снова сохранять то же значение последовательности (user_id = 1 and rv_id = 2) но я могу хранить user_id = 1 and rv_id = 3 или user_id =1 and rv_id =1

$request->validate([

            'rv_id'     => 'required|unique:favorite_unites,rv_id,user_id|exists:rvs,id', 
            'user_id'   => 'required|unique:favorite_unites,user_id,rv_id|exists:users,id',

        ]);

Ответы [ 2 ]

0 голосов
/ 21 января 2020

Вы были на правильном пути, у вас была только одна простая ошибка. Измените exists:rvs,id на exists:rvs и существует: пользователи, идентификатор на exists:users (если это ваши имена таблиц). Вам нужно передать table_name вместо column в этом правиле проверки. Из официальной документации:

существует: таблица, столбец

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

Подробнее о проверке здесь .

0 голосов
/ 21 января 2020

В этом случае, я думаю, вам нужно создать собственное правило

Класс запроса:

// Read more in bottom
'name' => ['required', new MustMatchCustomValue('rv_id')],

Класс правила (используйте artisan для его создания). )

class ValidateTwoValues implements Rule
{
    protected $rvId;

    public function __construct($rvId)
    {
        $this->rvId = $rvId;
    }

    /**
     * Determine if the validation rule passes.
     *
     * @param  string  $attribute
     * @param  mixed  $value
     * @return bool
     */
    public function passes($attribute, $value)
    {
        // $value contains the user_id
        // $this->rvId contains the other value
        // Do DB check here using DB::table('')...etc

        // return true if it's okay, or false if not
    }

    /**
     * Get the validation error message.
     *
     * @return string
     */
    public function message()
    {
        return 'You already have the selected RV.';
    }
}

ПРИМЕЧАНИЕ: Я уверен, если передача строки атрибута в качестве параметра классу Rule действительно отправит значение или только строку, в случае это просто строка, которую вы должны поменять на new MustMatchCustomValue($this->rv_id)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...