Try using a transaction through a stream as follows:
DB::beginTransaction(); try { $data = array( 'id' => Input::get('id'), 'task_title' => Input::get('task_title'), ); DB::table('task')->insert($data); $id = DB::getPdo()->lastInsertId(); // Add Actionees $this->addActionees(Input::get('actionees'), $id); } catch (Exception $ex) { DB::rollBack(); return Response::json($ex); } DB::commit(); return Response::json(true); private function addActionees($actionees, $id, $status) { DB::table('task_assignee_user')->where('task_id', $id)->delete(); foreach ($actionees as $act) { $actAdd = array( 'task_id' => $id, 'user_id' => $act->user_id, ); DB::table('task_assignee')->insert($actAdd); } }
- Start a transaction.
- Perform CRUD operations.
- Exclude and discard the transaction.
- If operations are performed smoothly, complete the transaction.
Edit:
addActionees always returns true because the delete() method does not throw an exception while execution is in progress. Therefore, $this->addActionees(Input::get('actionees'), $id) always returns true. Throw an exception manually:
private function addActionees($actionees, $id, $status) { $deleteResult = DB::table('task_assignee_user')->where('task_id', $id)->delete(); foreach ($actionees as $act) { $actAdd = array( 'task_id' => $id, 'user_id' => $act->user_id, ); DB::table('task_assignee')->insert($actAdd); } if ($deleteResult == 0) { throw new Exception('Delete failed'); } }
source share