【发布时间】:2020-01-24 19:18:40
【问题描述】:
我正在使用 Laravel-5.8 开发一个项目
protected $table = 'ratings';
protected $fillable = [
'rating_type',
'rating_value',
'rating_description',
];
public function rules()
{
return [
'rating_type' => 'required|numeric|min:1|max:10|unique:appraisal_ratings,rating_type,company_id'.$this->id,
];
}
评级有一个 id 列,这是主键。为什么我检查 company_id 是因为不同的公司可以有相同的评级类型。
控制器
public function edit($id)
{
$rating = Rating::where('id', $id)->first();
return view('ratings.edit')
->with('rating', $rating)
->with('rating_types', $this->rating_types)
->with('rating_descriptions', $this->rating_descriptions)
->with('rating_values', $this->rating_values);
}
public function update(UpdateRatingRequest $request, $id)
{
$rating = Rating::find($id);
$rating->rating_type = $request->rating_type;
$rating->rating_value = $request->rating_value;
$rating->rating_description = $request->rating_description;
$rating->save();
Session::flash('success', 'Rating is updated successfully');
return redirect()->route('ratings.index');
}
edit.blade
<form action="{{route('ratings.update', ['id'=>$rating->id])}}" method="post" class="form-horizontal" enctype="multipart/form-data">
{{ csrf_field() }}
<input name="_method" type="hidden" value="PUT">
<div class="card-body">
<div class="form-body">
<div class="row">
<div class="col-12 col-sm-4">
<div class="form-group">
<label class="control-label"> Rating:<span style="color:red;">*</span></label>
<select class="form-control select2bs4" data-placeholder="Choose Rating" tabindex="1" name="rating_type" style="width: 100%;">
<option value="">Select Rating</option>
@foreach($rating_types as $k => $rating_type)
<option value="{{$k}}" @if($rating->rating_type == $k) selected @endif>{{$rating_type}}</option>
@endforeach
</select>
</div>
</div>
<div class="col-12 col-sm-4">
<div class="form-group">
<label class="control-label"> Description:<span style="color:red;">*</span></label>
<select class="form-control select2bs4" data-placeholder="Choose Description" tabindex="1" name="rating_description" style="width: 100%;">
<option value="">Select Description</option>
@foreach($rating_descriptions as $k => $rating_description)
<option value="{{$k}}" @if($rating->rating_description == $k) selected @endif>{{$rating_description}}</option>
@endforeach
</select>
</div>
</div>
<div class="col-12 col-sm-4">
<div class="form-group">
<label class="control-label"> Rating Score:<span style="color:red;">*</span></label>
<select class="form-control select2bs4" data-placeholder="Choose Rating Score" tabindex="1" name="rating_value" style="width: 100%;">
<option value="">Select Rating Score</option>
@foreach($rating_values as $k => $rating_value)
<option value="{{$k}}" @if($rating->rating_value == $k) selected @endif>{{$rating_value}}</option>
@endforeach
</select>
</div>
</div>
</div>
</div>
</div>
<!-- /.card-body -->
<div class="card-footer">
<button type="submit" class="btn btn-primary">{{ trans('global.save') }}</button>
<button type="button" onclick="window.location.href='{{route('ratings.index')}}'" class="btn btn-default">Cancel</button>
</div>
</form>
当我点击保存按钮进行更新时,我得到了这个错误:
rating_type 已经存在。
由于我正在进行更新,因此不应该发生该错误。
我该如何解决?
谢谢。
【问题讨论】:
-
修改 unique:appraisal_ratings,rating_type,company_id'.$this->id 以忽略当前正在更新的 id [示例: Rule::unique('users')->ignore($user ->id)],
标签: laravel