laravel Model 실행 업무 의 실현

1.공식 매 뉴 얼 은 이렇게 소개 한다.
데이터베이스 트 랜 잭 션 에서 일련의 작업 을 실행 하려 면 DB 외관 의 transaction 방법 을 사용 할 수 있 습 니 다.트 랜 잭 션 패키지 에서 이상 을 던 지면 트 랜 잭 션 은 자동 으로 굴 러 갑 니 다.패 킷 을 닫 고 실행 에 성공 하면 사 무 는 자동 으로 제출 됩 니 다.transaction 방법 을 사용 할 때 수 동 스크롤 백 이나 제출 을 걱정 할 필요 가 없습니다.

DB::transaction(function () {
 DB::table('users')->update(['votes' => 1]);
 DB::table('posts')->delete();
});
수 동 사용 사무
스크롤 백 과 제출 을 수 동 으로 시작 하려 면 DB 의 beginTransaction 방법 을 사용 할 수 있 습 니 다.

DB::beginTransaction();
롤 백 방법 으로 스크롤 백 을 할 수 있 습 니 다.

DB::rollBack();
마지막 으로 commt 방법 으로 업 무 를 제출 할 수 있 습 니 다.

DB::commit();
메모:DB 외관 을 사용 하 는 트 랜 잭 션 방법 은 빌 더 와 Eloquent ORM 의 트 랜 잭 션 을 제어 하 는 데 도 사용 할 수 있 습 니 다.
2.구체 적 으로 이렇게 사용한다.

use Illuminate\Support\Facades\DB;
 
public function callRevert(Request $request){
  $data['call_id'] = intval($request->input('call_id'));
  $data['question_id'] = intval($request->input('question_id'));
  $data['call_name'] = $request->input('call_name');
  $data['revert'] = htmlspecialchars(trim($request->input('revert')));
  $list['page'] = intval($request->input('page'));
  $list['type_id'] = intval($request->input('type_id'));
  $list['status'] = intval($request->input('status'));
  $url = http_build_query($list);
  $url = action('Home\CallController@callQuestionView').'?'.$url;
  $validator = Validator::make($data, array('call_id' => 'required', 'call_name' => 'required','question_id'=>'required','revert'=>'required'));
  if($validator->fails()){
   FunctionController::error($url,'      !');
  }else{
   DB::beginTransaction();
   try{
    FeedbackRevert::insert($data);
    FeedbackQuestion::where('id','=',$data['question_id'])->update(['status'=>1]);
    DB::commit();
    FunctionController::success($url,'    !');
   }catch (\Exception $e) {
    DB::rollBack();
    FunctionController::error($url,'    !');
   }
  }
 }
트 랜 잭 션 스크롤 백 에 주의 하 세 요.예 를 들 어 3,4,5.5 스크롤 백 후에 데 이 터 를 다시 삽입 하면 3,4,6 이 넘 어 갑 니 다.왜 일 까요?
만약 당신 이 자 증 ID 가 사무 화 되 어 서 는 안 된다 고 생각한다 면,다른 사 무 는 자 증 ID 가 사용 되 었 는 지,스크롤 백 되 었 는 지 확인 하 는 것 을 기다 릴 수 밖 에 없습니다.이 로 인해 차단 되 었 습 니 다.
innodb 의 auto 때문에increant 의 카운터 가 기록 한 현재 값 은 메모리 에 저 장 됩 니 다.디스크 에 존재 하 는 것 이 아 닙 니 다.my sql 일 때.
server 가 실 행 될 때 이 계산 치 는 insert 에 따라 증가 할 뿐 delete 에 따라 감소 하지 않 습 니 다.my sql
server 가 시 작 될 때 auto 를 조회 해 야 합 니 다.increment 계수 값 을 계산 할 때 my sql 은 자동 으로 실 행 됩 니 다:SELECT MAX(id)FROM 표 이름
FOR UPDATE;문장 으로 현재 auto 획득increment 열의 최대 값 을 auto 에 넣 습 니 다.increment 카운터 에 있 습 니 다.그 러 니까
Rollback MySQL 의 autoincreament 카운터 도 마이너스 연산 을 하지 않 습 니 다.
해결 방법:count()등 계수 방식 으로 id 를 삽입 할 수 있 습 니 다(귀 찮 습 니 다)
이상 의 이 laravel Model 집행 업무 의 실현 은 바로 편집장 이 여러분 에 게 공유 한 모든 내용 입 니 다.여러분 께 참고 가 되 고 저희 도 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기