public function find($id) { $order = $this->ordersRepository->find($id); $client = $this->clientsRepository->findBy(['id' => $order->getClientId()])->current(); $ptype = $this->ptypesRepository->findBy(['id' => $order->getPtypeId()])->current(); $user = $this->usersRepository->findBy(['id' => $order->getUserId()])->current(); $sql = $this->ordersRepository->getItemTable()->getSql(); $select = $sql->select(); $select->join('products', 'order_items.product_id = products.id', ['product_name' => 'name'])->where(['order_id' => $order->getId()]); $items = $this->ordersRepository->getItemTable()->selectWith($select); foreach ($items as $item) { $order->addItem($item); } $hydrator = new ClassMethods(); $hydrator->addStrategy('items', new OrdersItemsHydratorStrategy(new ClassMethods())); $order->setClient($hydrator->extract($client)); $order->setPtype($hydrator->extract($ptype)); $order->setUser($hydrator->extract($user)); $result = $hydrator->extract($order); unset($result['client_id']); unset($result['ptype_id']); unset($result['user_id']); unset($result['user']['username']); unset($result['user']['password']); return $result; }