laravel Model 실행 업무 의 실현
데이터베이스 트 랜 잭 션 에서 일련의 작업 을 실행 하려 면 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 집행 업무 의 실현 은 바로 편집장 이 여러분 에 게 공유 한 모든 내용 입 니 다.여러분 께 참고 가 되 고 저희 도 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Laravel - 변환된 유효성 검사 규칙으로 API 요청 제공동적 콘텐츠를 위해 API를 통해 Laravel CMS에 연결하는 모바일 앱(또는 웹사이트) 구축을 고려하십시오. 이제 앱은 CMS에서 번역된 콘텐츠를 받을 것으로 예상되는 다국어 앱이 될 수 있습니다. 일반적으로 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.