/***創建一個用戶和用戶的關聯數據*@paramarray$userData*@paramarray$userFinanceData*@returnUserModel*@throws\Exception*/publicfunctionregister($userData,$userFinanceData){$db=UserModel::query()->getConnection();try{$db->beginTransaction();$user=UserModel::create($userData);$userFinanceData['user_id']=$user->id;FinanceAccountModel::create($userFinanceData);//事件觸發放在這里1?$db->commit();}catch(\Exception$exception){$db->rollBack();throw$exception;}//事件觸發放在這里2?event(newUserCreatedEvent($user));return$user;}如果放在[1]處,那么如果數據庫事務提交失敗,事件卻發出去了。導致事件消費者取不到該用戶的數據。如果放在[2]處,那么如果事件觸發失?。ɡ鐁edis連接錯誤),用戶卻創建成功了,但是創建用戶后需要做的一些事情沒有做,導致用戶數據不完整。怎么做才好?
先提交事務還是先觸發事件?
翻閱古今
2019-09-05 18:50:21