【问题标题】:Laravel Error during update - Undefined variable: id更新期间的 Laravel 错误 - 未定义的变量:id
【发布时间】: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


【解决方案1】:

您正在检查更新时的唯一性错误

Unique Rule Usage

unique:table,column,except,idColumn

* 第 3 个参数是要排除的列的值,第 4 个是要排除的列的值


修复

//App\Http\Requests\UpdateRatingRequest
'rating_type' => 'required|numeric|min:1|max:10|unique:table_name,rating_type,table_primary_key'.$this->id,

【讨论】:

    猜你喜欢
    • 2019-05-09
    • 2016-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-30
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多