首页 > 解决方案 > Laravel - 将数据更新到 2 个相关表中失败

问题描述

在我的 Laravel-5.8 应用程序中,我有两 (2) 个相关模型:

在我的 Laravel-5.8 中,我有这三 (3) 个模型:

身份

class Identity extends Model
{
    protected $table = 'identity';

    protected $fillable = [
              'id',
              'name',
          ];
    public function parameter()
    {
       return $this->hasOne(Parameter::class, 'identity_id');
    }    
}

范围

class Parameter extends Model
{    
    protected $table = 'parameters';
    protected $primaryKey = 'id';
    protected $fillable = [
                  'activate_goal',
                  'active_year',
                  'identity_id',
              ];

    public function identity()
    {
        return $this->belongsTo('App\Models\Identity','identity_id');
    }
}

请求规则:

public function rules()
{
    return [
        'appraisal_name' => [
            'required', 
            'min:5',
            'max:100',           
        ],       
        'activate_goal' => [
            'required',
        ], 
        'activate_year' => [
            'nullable',
        ], 
    ];
}

然后跟随控制器:

身份控制器

public function edit($id)
{
    $identity = Identity::where('id', $id)->first();   
    $parameter = Parameter::where('identity_id', $id)->first();
    return view('identities.edit')
            ->with('identity', $identity)
            ->with('parameter', $parameter);
}

public function update(UpdateIdentityRequest $request, $id)
{        
    $identity = Identity::find($id);  
    $identity->name           = $request->name;
    $identity->save();

    $parameter = Parameter::where('identity_id', $id)->fiirst();     
    $parameter->activate_goal           = $request->has('activate_goal');
    $parameter->activate_year           = $request->has('activate_year');          
    $parameter->save();            
}

然后最后是编辑身份的视图刀片:

<form action="{{route('identities.update', ['id'=>$identity->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-sm-12">
          <div class="form-group">
            <label class="control-label text-right col-md-0"> Name<span style="color:red;">*</span></label>
            <input type="text" name="appraisal_name" placeholder="Enter appraisal name here" class="form-control" value="{{old('name',$identity->name)}}">
          </div>
        </div>
      </div>
    </div>
    <div class="card-body">
      <div class="form-body">
        <div class="row">
          <div class="col-12 col-sm-3">
            <div class="form-group">
              <label class="control-label"> Activate Goal?:<span style="color:red;">*</span></label><br>
              <input type="checkbox" name="activate_goal" class="form-control" unchecked data-bootstrap-switch data-off-color="danger" data-on-color="success" data-off-text="NO" data-on-text="YES" @if($parameter->activate_goal == 1) checked @endif value="{{old('activate_goal')}}">
            </div>
          </div>
          <div class="col-12 col-sm-2">
            <div class="form-group">
              <label class="control-label"> Activate Year?:</label><br>
              <input type="checkbox" name="activate_year" class="form-control" unchecked data-bootstrap-switch data-off-color="danger" data-on-color="success" data-off-text="NO" data-on-text="YES" @if($parameter->activate_year == 1) checked @endif value="{{old('activate_year')}}">
            </div>
          </div>
        </div>
      </div>
    </div>
    <div class="card-footer">
      <button type="submit" class="btn btn-primary">Save</button>
    </div>
</form>

Identity 是主表,它在 Parameter 中有它的 identity_id。当 Identity: name, Parameter: activate_goal 和 activate_year 字段被输入时,应用程序从 Identity 中获取 id 并将其更新为 Parameter 表中的 identity_id。

这在插入(创建)中是成功的。但是,但是在更新时我收到了这个错误:

The activate goal is required

但这被选为复选框。

我该如何解决这个问题?

谢谢

标签: laravel

解决方案


你的代码有错误

改变这个

$parameter = Parameter::where('identity_id', $id)->fiirst();

$parameter = Parameter::where('identity_id', $id)->first(); 

推荐阅读