Laravel обновить проверку значения uique

У меня есть модель со свойством mobileNumber. номер мобильного телефона уникален, и правила проверки:

public  static  $rulesForEdit = array(
        'firstName' => 'required|min:5',
        'lastName' => 'required|min:5',
        'mobileNumber' => 'required|min:5|unique:admin,mobileNumber|numeric'
    );

когда я обновляю модель, я делаю это:

$data = array('firstName' => Input::get('firstName'),
        'lastName' => Input::get('lastName'),
        'mobileNumber' => Input::get('mobileNumber')
);
$validation = Validator::make($data, Admin::$rulesForEdit);
if($validation->passes()){
    $admin = Admin::find($id);
    $admin->firstName = Input::get('firstName');
    $admin->lastName = Input::get('lastName');
    $admin->mobileNumber = Input::get('mobileNumber');
    $admin->update();
    return Redirect::to("restaurants/admins/".$admin->id);
}else{

    return Redirect::back()->withInput()->withErrors($validation);
}

Проблема заключается в том, что я продолжаю получать сообщение об ошибке проверки, в котором говорится, что: The mobile number has already been taken, что правильно, но мобильный телефон принадлежит той же модели, которую я обновляю, нет другой модели, которая использовала бы этот номер мобильного телефона. , как раз тот, который я хочу обновить. Другими словами, я обновляю имя и фамилию, но не номер мобильного телефона.


person Anastasie Laurent    schedule 30.06.2014    source источник
comment
В соответствии с вашим условием в таблице admin mobileNumber должно быть уникальным, т. е. дублирование не допускается, если вы не обновляете номер мобильного телефона, удалите его из проверки.   -  person Vijayaragavendran    schedule 30.06.2014
comment
@VijayaragavendranHariharan это тоже уникально в моей таблице.   -  person Anastasie Laurent    schedule 30.06.2014
comment
'$data = array('firstName' => Input::get('firstName'), 'lastName' => Input::get('lastName'), ); $admin = Admin::find($id); $admin->firstName = Input::get('firstName'); $admin->lastName = Input::get('lastName'); $admin->update(); если вы не собираетесь обновлять его, то нет необходимости в обряде проверки?   -  person Vijayaragavendran    schedule 30.06.2014
comment
@VijayaragavendranHariharan, может быть, пользователь обновляет мобильный? это работает, когда он обновляет мобильный телефон новым мобильным телефоном, который раньше не использовался, но не работает, когда он не меняет текущий номер мобильного телефона. понял меня пожалуйста?   -  person Anastasie Laurent    schedule 30.06.2014
comment
да я понял в чем проблема   -  person Vijayaragavendran    schedule 30.06.2014
comment
вы должны переписать правило проверки, например 'mobileNumber' => 'required|min:5|unique:admin,mobileNumber,' . $id Чтобы заставить валидатор игнорировать уникальное правило для данного идентификатора, вы можете передать идентификатор того записанного, который проверяется,   -  person Vijayaragavendran    schedule 30.06.2014
comment
@VijayaragavendranHariharan, значит, новое правило должно быть таким 'mobileNumber' => 'required|min:5|unique:admin,mobileNumber,.$id|numeric'?   -  person Anastasie Laurent    schedule 30.06.2014
comment
'mobileNumber' => 'обязательно|min:5|числовой|уникальный:admin,mobileNumber,' . $id   -  person Vijayaragavendran    schedule 30.06.2014


Ответы (1)


Чтобы заставить валидатор игнорировать уникальное правило для данного идентификатора, вы можете передать идентификатор того записанного, который проверяется, например:

'mobileNumber' => 'required|min:5|numeric|unique:admin,mobileNumber,50'

Это не будет проверять уникальность модели, если идентификатор равен 10, поэтому при обновлении модели вам необходимо передать идентификатор текущей модели, чтобы игнорировать уникальное правило для этой модели:

'mobileNumber' => 'required|min:5|numeric|unique:admin,mobileNumber,' . $id


// Replace the Model with the name of your model within the controller 
// update method before the validation takes place 
Model::$rules['mobileNumber'] = 'required|min:5|numeric|unique:admin,mobileNumber,' . $id;
person Vijayaragavendran    schedule 30.06.2014
comment
почему вы удалили numeric ? - person Anastasie Laurent; 30.06.2014
comment
Я тоже добавил цифру - person Vijayaragavendran; 30.06.2014
comment
есть синтаксическая ошибка, я не могу сказать . $id в своих правилах. Массив правил находится в модели Admin и является статическим массивом. - person Anastasie Laurent; 30.06.2014
comment
// Замените модель на имя вашей модели в контроллере // метод обновления до того, как произойдет проверка Model::$rules['mobileNumber'] = 'required|min:5|numeric|unique:admin,mobileNumber,' . $идентификатор; - person Vijayaragavendran; 30.06.2014