public function findAll(UsersEntity $user) { $hydrator = new ClassMethods(); $hydrator->addStrategy('items', new OrderItemHydratorStrategy(new ClassMethods())); $res = []; switch ($user->getRole()) { case 'administrador': $orders = $this->tableGateway->select(); break; case 'salesman': $orders = $this->tableGateway->select(['user_id' => $user->getId()]); break; case 'guest': default: return new ApiProblem(405, "Guests can't get orders list."); break; } foreach ($orders as $order) { $items = $this->orderItemTableGateway->select(['order_id' => $order->getId()]); foreach ($items as $item) { $order->addItem($item); } $data = $hydrator->extract($order); $res[] = $data; } $arrayAdapter = new ArrayAdapter($res); $ordersCollection = new OrdersCollection($arrayAdapter); return $ordersCollection; }
public function find($id, UsersEntity $user = null) { $hydrator = new ClassMethods(); $hydrator->addStrategy('items', new OrderItemHydratorStrategy($hydrator)); $where = new Where(); $where->equalTo('id', $id); if ($user) { $where->equalTo('user_id', $user->getId()); } $order = $this->tableGateway->select($where)->current(); if (!$order) { return null; } $client = $this->clientTableGateway->select(['id' => $order->getClientId()])->current(); $order->setClient($client); $sql = $this->tableGatewayItems->getSql(); $select = $sql->select(); $select->join('products', 'order_items.product_id = products.id', ['product_name' => 'name'])->where(['order_id' => $order->getId()]); $items = $this->tableGatewayItems->selectWith($select); foreach ($items as $item) { $order->addItem($item); } return $hydrator->extract($order); }
/** * * @param UsersEntity $object */ public function extract($object) { return ['id' => $object->getId(), 'username' => $object->getUsername(), 'password' => $object->getPassword(), 'first_name' => $object->getFirstName(), 'last_name' => $object->getLastName(), 'role' => $object->getRole()]; }