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

Я передаю массив контактов на контроллер для удаления. При проверке запроса мне нужно убедиться, что контакт, который запрашивается для удаления, не является предпочтительным. (is_preferred = 1)

Данные, которые я отправляю:

[
   contacts => [
      [contact => '9874563214'],
      ['contact' => '8745632145'],
   ]
]

Вот так я проверяю данные в расширенном классе FormRequest.

public function rules() {
    return [
        'contacts.*.contact' => 'bail|regex:/^[7-9][0-9]{9}$/',
    ];
}

Это то, что я кодировал, это правильный путь? Как передать текущий оцениваемый контакт (where("contact_no", xxx))

public function rules() {
    return [
        'contacts.*.contact' => 'bail|regex:/^[7-9][0-9]{9}$/|exists:user_contact,contact_no|
        Rule::unique("user_contact")->where(function ($query) { $query->where('user_id', Auth::user()->id)->where("contact_no", XXX )->where("is_preferred", 1);}',
    ];
}

1 Ответ

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

Да! Вы можете использовать пользовательский запрос в вашем файле запроса. Например;

public function rules() {
    $roles['contacts.*.contact'] = [
        'bail',
        'regex:/^[7-9][0-9]{9}$/',
        'exists:user_contact,contact_no',
         Rule::unique("user_contact")
             ->where(function ($query) { 
                 $query->where('user_id', Auth::user()->id)
                 ->where("contact_no", XXX )->where("is_preferred", 1);
             })
    ];
    return $roles;
}

Если вы хотите использовать любое значение поля в своем запросе, вы можете передать значение поля через ключевое слово use в функцию Closure. Здесь мы опубликуем YOM экземпляр, что означает, что вы можете использовать его как Request, чтобы вы могли получить доступ ко всем параметрам запроса.

Например;

public function rules() {
    $roles['contacts.*.contact'] = [
        'bail',
        'regex:/^[7-9][0-9]{9}$/',
        'exists:user_contact,contact_no',
         Rule::unique("user_contact")
             ->where(function ($query) use ($this) {
                 $contacts = array_values($this->contacts);
                 $query->where('user_id', Auth::user()->id)
                 ->whereIn("contact_no", $contacts )->where("is_preferred", 1);
             })
    ];
    return $roles;
}

Совет, вам не следует напрямую использовать запрос в файле запроса проверки, потому что он не выглядит хорошим.

Вы можете использовать Пользовательская проверка вместо встроенного запроса. Это будет очень ясно.

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