Czyli bezczelnie przerabiamy string z PDO na int. Czaję. Dzięki.
class ProductList { private DB $db; public function __construct(DB $db){ $this->db = $db; } public function listProducts() { $products = $this->getProducts(); return $products; } { $this->db->query("SELECT zapytanie dluuugie"); $results = $this->db->resultSet(); return $results; } { foreach ($this->listProducts() as $row) { //sortowanie w tablicy, w tym temacie niewazne } return $products; }
$products = $this->getProducts(); return $products; // powinno być return $this->getProducts();
class Product { private int $productId; /* inne zmienned */ /* inne settery i gettery */ { $this->properties = $properties; } { return $this->properties; } }
Lecz edytor podpowiada mi tutaj w przedostatniej linijce (nie licząc domknięć nawiasów), że "assigning void from a function setProperties". No jest void bo każdy setter ma ustawione void, więc czemu tylko p[rzy tym jednym się czepia?
{ $productObject = new Product(); foreach ($this->getProducts() as $row) { // foreach ($this->listProducts() as $row) { $pid = $row['sku']; // $products[$pid] = array('name' => $row['name'], 'price' => $row['price'], 'id' => $row['prodId'], 'properties' => array()); } $products[$pid]['properties'][] = $productObject->setProperties(['value' => $row['value'], 'label' => $row['label']]); } } return $products; }
{ foreach ($this->getProducts() as $row) { $product = new Product(); $product->setName($row['name']); //... reszta pol $products[] = $product; } return $products; }
{ foreach ($this->getProducts() as $row) { $product = new Product(); $product->setProductName($row['name']); $product->setSku($row['sku']); $product->setPrice($row['price']); $product->setProductId($row['sku']); $product->setProductId($row['prodId']); // $pid = $row['sku']; // $products[$pid] = array('name' => $row['name'], 'price' => $row['price'], 'id' => $row['prodId'], 'properties' => array()); } // $products[$row['sku']]['properties'][] = $product->setProperties(['value' => $row['value'], 'label' => $row['label']]); } $products[] = $product; } return $products; }
Tak?
{ foreach ($this->getProducts() as $row) { $product = new Product(); $product->setProductName($row['name']); $product->setSku($row['sku']); $product->setPrice($row['price']); $product->setProductId($row['sku']); $product->setProductId($row['prodId']); // $products[$pid] = array('name' => $row['name'], 'price' => $row['price'], 'id' => $row['prodId'], 'properties' => array()); } $product->setProperties(['value' => $row['value'], 'label' => $row['label']]); // $products[$row['sku']]['properties'][] = $product->setProperties(['value' => $row['value'], 'label' => $row['label']]); } $products[] = $product; } return $products; }
I chyba to jest to co ma być bo tablica przypomina ta co była wcześniej, zanim tworzyliśmy tablicę obiektów:
{ foreach ($this->getProducts() as $row) { $product = new Product(); $product->setProductName($row['name']); $product->setSku($row['sku']); $product->setPrice($row['price']); $product->setProductId($row['prodId']); // $products[$pid] = array('name' => $row['name'], 'price' => $row['price'], 'id' => $row['prodId'], 'properties' => array()); } $properties[] = ['value' => $row['value'], 'label' => $row['label']]; $product->setProperties($properties); // $products[$row['sku']]['properties'][] = $product->setProperties(['value' => $row['value'], 'label' => $row['label']]); } $products[$row['sku']] = $product; } return $products; }
{ foreach ($this->getProducts() as $row) { $product = new Product(); $product->setProductName($row['name']); $product->setSku($row['sku']); $product->setPrice($row['price']); $product->setProductId($row['sku']); $product->setProductId($row['prodId']); $products[$row['prodId']] = $product; } $products[$row['prodId']]->addProperty($row['value'], $row['label']); } } return $products; }
public function addProperty(string $value, string $label) { $this->setProperties(['value' => $value, 'label' => $label]); }
$product = new Product(); $product->setProductName($_POST['name']); $product->setSku($_POST['sku']); $product->setPrice($_POST['price']); $product->setProductType($_POST['productType']); $productObject = new ProductAdd($this->db); if (!$productObject->checkExistingSKU($product->getSku())) { $productObject->insertNewProduct($product); } /* oraz w innym pliku metoda insertNewProduct, a przynajmniej jej kawałek, bez większości bebechów */ public function insertNewProduct(Product $product) { if ($this->ensureNoEmpytValues($product) === false) return false; $sku = $product->getSku(); $productName = $product->getProductName(); $price = $product->getPrice(); $selectedType = $product->getProductType(); // tutaj pętal forach - nie ważne $queryInsertProduct = "INSERT INTO `product` (`id`, `sku`, `name`, `price`, `type`) VALUES (null, :sku, :productName , :price, :selectedType)"; $this->db->query($queryInsertProduct); $this->db->bind(':sku', $sku); $this->db->bind(':productName', $productName); $this->db->bind(':price', $price); $this->db->bind(':selectedType', $selectedType); $this->db->execute(); $lastProductId = $this->db->lastInsertId();
$properties = $this->groupFullProperties(); foreach ($properties[$product->getProductType()] as $propertyData) { return false; }
$product = new Product(); $product->setProductName($_POST['name']); $product->setSku($_POST['sku']); $product->setPrice($_POST['price']); $product->setProductType($_POST['productType']); $productObject = new ProductAdd($this->db); if (!$productObject->checkExistingSKU($product->getSku())) { $productObject->insertNewProduct($product); } }
public function insertNewProduct(Product $product) { if ($this->ensureNoEmpytValues($product) === false) return false; $properties = $this->groupFullProperties(); foreach ($properties[$product->getProductType()] as $propertyData) { return false; } $this->db->query("INSERT INTO `product` (`id`, `sku`, `name`, `price`, `type`) VALUES (null, :sku, :productName, :price, :selectedType)"); $this->db->bind(':sku', $product->getSku()); $this->db->bind(':productName', $product->getProductName()); $this->db->bind(':price', $product->getPrice()); $this->db->bind(':selectedType', $product->getProductType()); $this->db->execute(); $lastProductId = (int) $this->db->lastInsertId(); foreach ($properties[$product->getProductType()] as $propertyData) { $propertyId = $propertyData['id']; $this->db->query("INSERT INTO `product_property` (`id`, `product_id`, `property_id`, `value`) VALUES (null, $lastProductId, $propertyId, :productValue )"); $this->db->bind(':productValue', $_POST[(string) $propertyData['property']]); $this->db->execute(); }
Oczywiście trzeba ten kawałek zmodyfikować by dodawał do obiektu $product też tablicę zawierającą $_POST[$propertyData['property']].
$properties = $this->groupFullProperties(); foreach ($properties[$product->getProductType()] as $propertyData) {