首页 > 解决方案 > 使用 laravel 编辑两个唯一值

问题描述

我的 Laravel 5.8 项目有问题。我想编辑两个都具有唯一值的字段之一。

刀:

@extends('layouts.master')

@section('content')
<h1>CHANGE SURGICAL DIVISION</h1>
<a href="/surgical-div">
    <button type="button" class="btn btn-primary btn-sm">BACK</button><br>
</a>

@if (session('mess'))
<div class="alert alert-success">
    {{ session('mess')}}
</div>
@endif

<form method="POST" action="/surgical-div/{{ $surgicaldivs->id_surgical_div }}">
    @method('patch')
    @csrf

    <div class="form-group">
        <label for="name_surgical_div">Surgical Division Name: </label>
        <input type="text" value="{{ $surgicaldivs->name_surgical_div }}"
            class="form-control @error('name_surgical_div') is-invalid @enderror" id="name_surgical_div" name="name_surgical_div"
            placeholder="Insert The Surgical Division">

            @error('name_surgical_div')
        <div class="invalid-feedback">
            {{ $message }}
        </div>
        @enderror
    </div>

    <div class="form-group">
        <label for="initial_surgical_div">Surgical Division Initial : </label>
        <input type="text" value="{{ $surgicaldivs->initial_surgical_div }}"
            class="form-control @error('initial_surgical_div') is-invalid @enderror" id="initial_surgical_div" name="initial_surgical_div"
            placeholder="Insert Surgical Division Initial">

            @error('initial_surgical_div')
        <div class="invalid-feedback">
            {{ $message }}
        </div>
        @enderror
    </div>

    <button type="submit" class="btn btn-success btn-sm">Save</button>
</form>
@endsection

控制器:

public function edit($id)
    {
        $surgicaldivs = SurgicalDiv::withTrashed()->find($id);

        return view('pages.surgical_div.surgical_div_edit', compact('surgicaldivs'));
    }

模型:

namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class SurgicalDiv extends Model
{
    //Table Name
    protected $table = 'surgical_div';

    // Primary Key
    protected $primaryKey = 'id_surgical_div';

    //Soft Deletes
    use SoftDeletes;

    //Fillable Field
    protected $fillable = ['name_surgical_div', 'initial_surgical_div'];
}

这是我尝试过的控制器中的更新:

public function update(Request $request, SurgicalDiv $SurgicalDiv)
    {
        $request->validate([
                'name_surgical_div' => 'required|unique:surgical_div,name_surgical_div',
                'initial_surgical_div' => 'required|unique:surgical_div,initial_surgical_div'
        ]);

        SurgicalDiv::withTrashed()->where('id_surgical_div',$id)
                ->update([
                    'name_surgical_div' => $request->name_surgical_div,
                    'initial_surgical_div' => $request->initial_surgical_div
                ]);

        return redirect('/surgical-div/'.$id.'/edit')->with('mess',' Surgical Division Change Success !');
    }

我不知道在控制器的更新功能上放什么。我想从我的刀片更新一个或什至两个字段。

标签: laravellaravel-5.8

解决方案


尝试这个

public function update(Request $request, SurgicalDiv $SurgicalDiv)
    {
        $request->validate([
                'name_surgical_div' => 'required|unique:surgical_div,name_surgical_div,'.$id,
                'initial_surgical_div' => 'required|unique:surgical_div,initial_surgical_div,'.$id
        ]);

        SurgicalDiv::withTrashed()->where('id_surgical_div',$id)
                ->update([
                    'name_surgical_div' => $request->name_surgical_div,
                    'initial_surgical_div' => $request->initial_surgical_div
                ]);

        return redirect('/surgical-div/'.$id.'/edit')->with('mess',' Surgical Division Change Success !');
    }

这将检查表中的相同条目,除了带有$id. 通过这种方式,您可以检查两列中是否还有其他具有相同值的行。


推荐阅读