Я пробую это:
public function destroy($id) { DB::beginTransaction(); try { $product = $this->product_repository->find($id); $result = $product->categories()->detach(); if($result) { list($status,$instance) = $this->product_repository->delete($id); } DB::commit(); return ['status'=>true,'data'=>$status]; } catch (\Exception $e) { DB::rollback(); return ['status'=>false, 'message'=>$e->getMessage()]; } }
Если код выполнен, $this->product_repository->delete($id)
не работает / не удаляется.
Но это: $product->categories()->detach();
, он работает / удаляется.
Как, если удалить продукт не удалось, удалить категорию также не удалось?
Вы не можете добавить оператор return
внутри transaction
который останавливает весь процесс и выполняется DB::rollback()
.
Чтобы переключить return
, вы можете определить boolean
переменную и сделать false
во время исключения исключения.
Как это:
public function destroy($id) { $success = true; DB::beginTransaction(); try{ // Your Code $product = $this->product_repository->find($id); $result = $product->categories()->detach(); if($result) { list($status,$instance) = $this->product_repository->delete($id); } DB::commit(); }catch(\Exception $e){ DB::rollback(); $success = false; } if($success){ // Return data for successful delete } else{ // Return data for unsuccessful delete } }
Надеюсь ты понимаешь.
Вы можете использовать его следующим образом:
$returnResult = []; DB::beginTransaction(); try { ... DB::commit(); $returnResult['status'] = true; $returnResult['data'] = $status; } catch (...) { ... DB::rollback(); $returnResult['status'] = true; $returnResult['message'] = $e->getMessage(); } return $returnResult;