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);
 }