public function update($id, $data) { $hydrator = new ObjectProperty(); $orderData = $hydrator->extract($data); $items = $orderData['item']; unset($orderData['item']); try { $this->repository->beginTransaction(); $this->repository->update($orderData, $id); $listItemsIds = []; foreach ($items as $item) { if (array_key_exists('id', $item)) { $itemId = $item['id']; $this->repository->updateItem($item, $itemId); } else { $item['order_id'] = $id; $itemId = $this->repository->insertItem($item); } $listItemsIds[] = $itemId; } $this->repository->deleteItemsNotInArray($id, $listItemsIds); $this->repository->commitTransaction(); } catch (Exception $e) { $this->repository->rollbackTransaction(); return false; } return $this->repository->find($id); }