一个列更新查询未执行。添加的数据未在数据库中更新。
我的观点:
<?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”。满足“存在”规则。这种情况一定不会发生。我该怎么做才能避免这个测试用例。??
答案 0 :(得分:0)
对于更新,请使用此规则。将当前行ID传递给规则。它会做魅力
$rules = array(
'spe_name' => 'required|unique:spec,:id',
'description' => 'required'
)
了解更多信息check