/** * @param string $sku * @return Product * @throws QueryException */ public function getBySku(string $sku) : Product { $qb = $this->connection->createQueryBuilder(); $qb->select('*')->from('dumplie_inventory_product')->where('sku = :sku')->setParameter('sku', $sku); $productData = $this->connection->fetchAssoc($qb->getSQL(), $qb->getParameters()); if (empty($productData)) { throw QueryException::productNotFound($sku); } return new Product($productData['sku'], $productData['price_amount'] / $productData['price_precision'], $productData['price_currency'], (bool) $productData['is_in_stock'], $this->mao->getBy([Metadata::FIELD_SKU => $productData['sku']])); }