私は基本的なユーザー情報のユーザーモデルを持っています。そして、ユーザーとロールを関連付けるRoleモデルとRoleUserモデルを持っています。ユーザー編集フォームでは、そのユーザーに追加の役割を追加できます。だから、ここ2 DB操作は、DB ::トランザクション内で実行されているLaravel 5.3 DB:一部のクエリでもトランザクションのコミットが失敗しています
1) Update User info into User model
2) Add role to user
問題、それはすでに正常に更新され、「ユーザー」モデルの変更をロールバックしない失敗「ユーザーに役割を追加する」場合には、あります。ここで
は、コントローラ内の
コード - 私のサンプルです:createRoleUserのRoleUserモデルで
$response =
DB::transaction(function() use($user_data, $input) {
//Update changes in basic user info using "User" Model
$response = User::updateUser($user_data['user']);
if ($response->status===FALSE) {//not updated
return $response;
}
if (!empty($user_data['roles'])) {
$roles = [];
foreach ($user_data['roles'] as $role) {
$roles[] = ['role_id' => $role, 'user_id' => $user_data['user']['id'], 'created_by' => $this->curr_user->id, 'updated_by' => $this->curr_user->id];
}
//Add new roles to the user using "RoleUser" Model
$response3 = RoleUser::createRoleUser($roles);
if ($response3->status===FALSE) {//failed to add
return $response3;
}
}
return $response;
}, 5);
createRoleUser方法の//ソース
try {
DB::table($table)->where('id', $id)->update($changes);
} catch (\Illuminate\Database\QueryException $qe) {
return (object) ['status' => FALSE, 'error' => $qe->errorInfo];
} catch (\Exception $e) {
return (object) ['status' => FALSE, 'error' => [$e->getCode(), 'non-DB', $e->getMessage()]];
}
return (object) ['status' => TRUE, 'data' => $changes + ['id' => $id]];
//ソースRoleUserモデルのメソッド
try {
$new_rec_id = DB::table('role_users)->insertGetId($new_data);
$new_rec = FALSE;
if ($new_rec_id) {
$new_rec = DB::table($table)->where('id', $new_rec_id)->first();
}
} catch (\Illuminate\Database\QueryException $qe) {
return (object) ['status' => FALSE, 'error' => $qe->errorInfo];
} catch (\Exception $e) {
return (object) ['status' => FALSE, 'error' => [$e->getCode(), 'non-DB', $e->getMessage()]];
}
return (object) ['status' => TRUE, 'data' => $new_rec];
おかげ@Patricusが、それは完璧に動作します:
だから、あなたのコードは次のようになります! – Sadat