首页 > 解决方案 > Laravel - 如何更新复选框字段值

问题描述

使用 Laravel-5.8,我已经能够将数据保存到数据库中,包括复选框字段。

protected $fillable = [
    'appraisal_name',
    'is_current',
    'appraisal_start',
    'appraisal_end',
];
public function rules()
{
    return [
        'appraisal_name'  => 'required|min:5|max:100',
        'appraisal_start' => 'required',
        'appraisal_end'   => 'required|after_or_equal:appraisal_start',
        'is_current'      => 'nullable|boolean',
    ];
}
public function create()
{
    return view('appraisal.appraisal_identities.create');
}

public function store(StoreAppraisalIdentityRequest $request)
{
    $identity = AppraisalIdentity::create([
        'appraisal_name'  => $request->appraisal_name,
        'appraisal_start' => $appraisalStart,
        'appraisal_end'   => $appraisalEnd,
        'is_current'      => $request->has('is_current'),
    ]);
    Session::flash('success', 'Appraisal Initialization is created successfully');

    return redirect()->route('appraisal.appraisal_identities.index');
}

public function edit($id)
{
    abort_unless(\Gate::allows('appraisal_identity_edit'), 403);
    $identity = AppraisalIdentity::where('id', $id)->first();

    return view('appraisal.appraisal_identities.edit')->with('identity', $identity);
}

public function update(UpdateAppraisalIdentityRequest $request, $id)
{
    abort_unless(\Gate::allows('appraisal_identity_edit'), 403);

    $appraisalStart = Carbon::parse($request->appraisal_start);
    $appraisalEnd = Carbon::parse($request->appraisal_end);
    $submissionStart = Carbon::parse($request->submission_start);
    $submissionEnd = Carbon::parse($request->submission_end);

    $identity = AppraisalIdentity::find($id);
    $identity->appraisal_name = $request->appraisal_name;
    $identity->appraisal_start = $appraisalStart;
    $identity->appraisal_end = $appraisalEnd;
    $identity->is_current = $request->has('is_current');
    $identity->save();
    Session::flash('success', 'Appraisal Initialization is updated successfully');

    return redirect()->route('appraisal.appraisal_identities.index');
}

创建.blade

<form  action="{{route('appraisal.appraisal_identities.store')}}" method="post" class="form-horizontal" enctype="multipart/form-data">
    {{csrf_field()}}
    <div class="form-body">
        <div class="row">
            <div class="col-md-6">
                <div class="form-group row">
                     <label class="control-label text-right col-md-3">Is Current Appraisal?</label>
                      <div class="col-md-9">
                          <input type="checkbox" class="form-control"  name="is_current" value="{{old('is_current')}}">
                      </div>
                  </div>
              </div>
          </div>
      </div>
      <div>
          <!--<input class="btn btn-primary" type="submit" value="{{ trans('global.save') }}">-->
          &nbsp;&nbsp;&nbsp;<button type="submit" class="btn btn-primary">{{ trans('global.save') }}</button>
          <button type="button" onclick="window.location.href='{{route('appraisal.appraisal_identities.index')}}'" class="btn btn-default">Cancel</button>
      </div>
</form>

编辑刀片

 <form  action="{{route('appraisal.appraisal_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="form-body">
        <div class="row">
            <div class="col-md-6">
                <div class="form-group row">
                     <label class="control-label text-right col-md-3">Is Current Appraisal?</label>
                      <div class="col-md-9">
                          <input type="checkbox" class="form-control"  name="is_current" value="{{old('is_current')}}">
                      </div>
                  </div>
              </div>
          </div>
      </div>
      <div>
          <!--<input class="btn btn-primary" type="submit" value="{{ trans('global.save') }}">-->
          &nbsp;&nbsp;&nbsp;<button type="submit" class="btn btn-primary">{{ trans('global.save') }}</button>
          <button type="button" onclick="window.location.href='{{route('appraisal.appraisal_identities.index')}}'" class="btn btn-default">Cancel</button>
      </div>
</form>

我在尝试更新数据时遇到这些问题?

  1. 加载时,编辑复选框字段 (is_current) 未从数据库中选择值。它仍然未选中。

  2. is_current 为 0 或 1。目标是,表中只能有一个 is_current 字段设置为 1。从复选框中,当 is_current 被选中为 1 时,它应该将表中为 1 的任何其他 is_current 设置为 0。

我该如何解决这些问题?

谢谢你。

标签: laravel

解决方案


在编辑刀片中,将您的复选框代码更新为:

<input type="checkbox" class="form-control"  name="is_current" @if($identity->is_current == 1) checked @endif value="{{old('is_current')}}">

在你的更新功能改变这个:

public function update(UpdateAppraisalIdentityRequest $request, $id)
{
    abort_unless(\Gate::allows('appraisal_identity_edit'), 403);

    $appraisalStart = Carbon::parse($request->appraisal_start);
    $appraisalEnd = Carbon::parse($request->appraisal_end);
    $submissionStart = Carbon::parse($request->submission_start);
    $submissionEnd = Carbon::parse($request->submission_end);

    $identity = AppraisalIdentity::find($id);
    $identity->appraisal_name = $request->appraisal_name;
    $identity->appraisal_start = $appraisalStart;
    $identity->appraisal_end = $appraisalEnd;
    $identity->is_current = $request->has('is_current');
    $identity->save();

    // this line update all column to 0 and leave $id field
    AppraisalIdentity::where('id', '!=', $id)->update(['is_current' => 0]);

    Session::flash('success', 'Appraisal Initialization is updated successfully');

    return redirect()->route('appraisal.appraisal_identities.index');
}

在您的商店功能中更改此:

public function store(StoreAppraisalIdentityRequest $request)
{
    $identity = AppraisalIdentity::create([
        'appraisal_name'  => $request->appraisal_name,
        'appraisal_start' => $appraisalStart,
        'appraisal_end'   => $appraisalEnd,
        'is_current'      => $request->has('is_current'),
    ]);


    $id = $identity->id;
    // this line update all column to 0 and leave $id field
    AppraisalIdentity::where('id', '!=', $id)->update(['is_current' => 0]);

    Session::flash('success', 'Appraisal Initialization is created successfully');

    return redirect()->route('appraisal.appraisal_identities.index');
}

推荐阅读