public function update($id, $data) { $hydrator = new ObjectProperty(); $data = $hydrator->extract($data); $orderData = $data; unset($orderData['item']); $items = $data['item']; $tableGateway = $this->repository->getTableGateway(); try { $tableGateway->getAdapter()->getDriver()->getConnection()->beginTransaction(); $tableGateway->update($orderData, array('id' => $id)); $this->repository->deleteItem($id); foreach ($items as $item) { $item['order_id'] = $id; $this->repository->insertItem($item); } $tableGateway->getAdapter()->getDriver()->getConnection()->commit(); return $data; } catch (\Exception $e) { $tableGateway->getAdapter()->getDriver()->getConnection()->rollback(); return 'error'; } }