Laavel을 통해 새로운 DB 추가 및 업데이트 공통화 방법
배경.
Laavel에서 CRUD 처리를 구현하는 경우
추가와 업데이트 처리는 처리에 있어서는 거의 같지만 매번 컨트롤러와 보기를 준비해야 하니'좀 번거롭다'는 생각이 든다.
라벨은
updateOrCreate
이런 방법이 있고, 데이터가 있으면 업데이트하고, 없으면 새로운 방법을 추가하며, 코드는 거의 중복된다.나는 지능적으로 실현될 수 있는지 조사한 후에 실시했다.
코드
전제 조건
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 $item
route에서 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을 지정하면 업데이트할 때 모델 대상의 값을 설정하고 새로 추가할 때 비어 있습니다.
검증 오류로 렉이 걸렸을 때 입력 값은 유지됩니다.
발리의 규칙을 추가하고 갱신하는 것 외에, 새로 추가할 때 반드시 특수한 처리를 해야 할 때를 제외하고는 모두 이 모델로 실현할 수 있다고 생각한다.
Reference
이 문제에 관하여(Laavel을 통해 새로운 DB 추가 및 업데이트 공통화 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/whiro/articles/4a63e79b5314af960046텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)