Laavel을 통해 새로운 DB 추가 및 업데이트 공통화 방법

배경.


Laavel에서 CRUD 처리를 구현하는 경우
추가와 업데이트 처리는 처리에 있어서는 거의 같지만 매번 컨트롤러와 보기를 준비해야 하니'좀 번거롭다'는 생각이 든다.
  • 새로 추가된 폼에서 새로 추가
  • 기존 데이터 업데이트 형식에서 업데이트 처리
  • 위의 두 프로세스 중
    라벨은 updateOrCreate 이런 방법이 있고, 데이터가 있으면 업데이트하고, 없으면 새로운 방법을 추가하며, 코드는 거의 중복된다.
    나는 지능적으로 실현될 수 있는지 조사한 후에 실시했다.

    코드


    전제 조건

  • Laavel의 명명 규칙에 따라 Item 모델을 정의하여 item_name
  • 을 제작한다.

    route


    // 新規追加&更新フォーム用
    Route::get('/item/input/{item?}', 'ItemController@input')->name('input.item');
    
    // 新規追加実行&更新実行
    Route::post('/item/save/{item?}', 'ItemController@save')->name('save.item');
    
    실행 부분의route 정의의 기모는 모델 경로에서 {item?}와 같다.구문을 사용합니다.
    이렇게 하면 URL을 새로 추가할 때 ID가 필요하지 않습니다.

    controller


    // 入力フォーム
    public function input(Item $item)
    {
        return view('input.item', compact('item'));
    }
    
    // 追加or更新処理
    public function save(Request $requestItem,Item $item)
    {
        Item::updateOrCreate(['id' => $item->id], $requestItem);
        return redirect()->route('item.complete');
    }
    
    제어 매개 변수로Item $itemroute에서 Item 모델의 ID를 지정한 경우
    지정된 레코드의 객체를 가져올 수 있습니다.
    Item 모델의 인스턴스는 지정되지 않은 상태에서 Laavel의 주입 기능을 통해 얻을 수 있습니다.
    추가 또는 업데이트 프로세스에서 지정됨['id' => $item->id].
    ID=NULL을 지정하면 업데이트Orcreate가 새 추가 동작을 수행합니다.

    view


    {{Form::open(['method'=>'post','route' => ['item.save',['item' => $item->id]]])}}
    
    <input type="text"
    name="item_name"
    value="{{old('item_name',$item->item_name)}}">
    
    <button type="submit">投稿する</button>
    
    {{ Form::close() }}
    
    
    {{old('item_name',$item->item_name)}}
    
    라는 말이 있다.
    폼의 기본값으로 $item->itemname을 지정하면 업데이트할 때 모델 대상의 값을 설정하고 새로 추가할 때 비어 있습니다.
    검증 오류로 렉이 걸렸을 때 입력 값은 유지됩니다.
    발리의 규칙을 추가하고 갱신하는 것 외에, 새로 추가할 때 반드시 특수한 처리를 해야 할 때를 제외하고는 모두 이 모델로 실현할 수 있다고 생각한다.

    좋은 웹페이지 즐겨찾기