laravel db update未执行

时间:2014-11-03 08:01:50

标签: php laravel

一个列更新查询未执行。添加的数据未在数据库中更新。

我的观点:

<?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'
        );  
       }

在这种情况下,更新正在运行,插入正在运行。但只有一个案例不令人满意 它是“如果db包含一个名为”abc“和”xyz“的条目。我们将在插入时检查它们是否是唯一的。但是如果我为Edit选择”xyz“并将其名称更改为”abc“并单击update。将出现两个“abc”。满足“存在”规则。这种情况一定不会发生。我该怎么做才能避免这个测试用例。??

1 个答案:

答案 0 :(得分:0)

对于更新,请使用此规则。将当前行ID传递给规则。它会做魅力

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

了解更多信息check