2014-11-03 5 views
0

Один запрос обновления столбца не выполняется. добавленные данные не обновляются в базе данных.Обновление laravel db не выполняется

мой взгляд:

<?php echo Form::open(array('url' => 'admin/add-edit-spe')) ;?> 
/* form elements */ 

Admincontroller

public function postAddEditSpe() 
     { 
    Input::flash(); 
    $rules = array(     
      'spe_name' => 'required|unique:spec', 
      'description' => 'required' 
    );  
    $messages = array(
      'spe_name.required' => 'Spe name is required', 
      'spe_name.unique:' => 'Spe name should be unique', 
      'description.required' => 'Spe description is required', 
    ); 
    $validator = Validator::make(Input::all(), $rules, $messages); 
if ($validator->fails()) 
      { 
       dd($validator->errors); 
    /* shows the same page */ 
} 
else{ 
    $data['spe_id']=Input::get('spe_id'); 
       $data['spe_name']=Input::get('spe_name'); 
       $data['spe_content']=Input::get('description'); 
       $data['r_tags']=Input::get('r_tags'); 
       $data['f_spe']=Input::get('f_spe'); 
       $data['r_spe']=implode(",",Input::get('r_id')); 
    DB::table('spec')->where('spe_id','=',$data['spe_id'])->update(array('spe_name' => $data['spe_name'],'spe_content' => $data['spe_content'],'f_spe' => $data['f_spe'],'related_spe' => $data['r_spe'],'r_tags' => $data['r_tags'])); 
    } 
     } 

ошибка проверки показывает:

Undefined property: Illuminate\Validation\Validator::$errors 

выход dd($validator->messages()); является:

object(Illuminate\Support\MessageBag)#895 (2) { ["messages":protected]=> array(1) { ["spe_name"]=> array(1) { [0]=> string(43) "The spe name has already been taken." } } ["format":protected]=> string(8) ":message" } 

часть else не выполнена из-за отказа проверки. может ли кто-нибудь сказать мне, что означает эта ошибка проверки? почему это происходит?

Издание я сделал

я переоформлена правила проверки для вставки и обновления, как это:

if(Input::get('speciality_id')!=0){ 
      // Updation 
      $rules = array(     
       'speciality_name' => 'required|exists:speciality', 
       'description' => 'required' 
     ); 
     } 
     else{ 
     // Insert 
     $rules = array(     
       'speciality_name' => 'required|unique:speciality', 
       'description' => 'required' 
     ); 
     } 

В этом случае Updation работает, вставка работают. но только один случай не удовлетворяет : «Если db содержит запись с именем« abc »и« xyz », мы будем проверять, являются ли они уникальными при вставке, но если я выберем« xyz »для Edit и измените его имя до «abc» и нажмите «Обновить», произойдет два «abc». Правило «существует» выполнено. Этого сценария не должно быть. Что мне делать, чтобы избежать этого тестового примера.

+0

вы отлаживать, что Laravel получает все необходимое post params из формы? – Serg

+1

@Serg: У меня отмечена отладка в app.php как истина. но на сайте не было обнаружено ошибок. (пожалуйста, простите меня .. я только начал изучать laravel сегодня) – Zammuuz

+1

Можете ли вы опубликовать вывод, когда вы добавляете строку 'dd ($ data)' прямо перед DB :: table ('spec') ...-> update() ? – soulkphp

ответ

0

Для обновления используйте это правило. Проходят текущий идентификатор строки правилам. он будет делать очарование

$rules = array(     
     'spe_name' => 'required|unique:spec,:id', 
     'description' => 'required' 
) 

для получения дополнительной информации check

+0

, то как я могу проверить, является ли во время обновления введенное имя уникальным. то есть, например, если уже есть запись с именем «abc», и я взял запись «xyz» для обновления. и я отредактирую его имя на «abc» и нажмите «Обновить». этот сценарий не должен происходить. – Zammuuz

+0

удалить уникальный: spec. если вам не нужна уникальная проверка. –

+0

Я отредактировал комментарий. проверьте этот сценарий. – Zammuuz

Смежные вопросы