/** * @param Product $product */ private function saveOptions($product) { if ($product->isOptionsModified()) { $productOptionsExisted = boolval($this->getDb()->query("DELETE FROM product_option WHERE product_id = :productId", [':productId' => $product->getId()])); $this->getDb()->query("DELETE FROM product_option_value WHERE product_id = :productId", [':productId' => $product->getId()]); foreach ($product->getOptions() as $productOption) { $params = [':productOptionId' => $productOption->getId(), ':productId' => $product->getId(), ':optionId' => $productOption->getOption()->getId(), ':isRequired' => $productOption->isRequired(), ':optionValue' => $productOption->getValue()]; if ($params[':optionValue'] instanceof ProductOptionValueCollection) { $params[':optionValue'] = ''; } if ($productOptionsExisted) { $this->getDb()->query("\n INSERT INTO product_option\n SET\n product_option_id = :productOptionId,\n product_id = :productId,\n option_id = :optionId,\n required = :isRequired,\n option_value = :optionValue\n ", $params); } else { unset($params[':productOptionId']); $this->getDb()->query("\n INSERT INTO product_option\n SET\n product_id = :productId,\n option_id = :optionId,\n required = :isRequired,\n option_value = :optionValue\n ", $params); } $productOption->setId($this->getDb()->getLastId()); //TODO: Should work regardless of type based on values only // if ($productOption->getType() == 'select' || $productOption->getType() == 'radio' || // $productOption->getType() == 'checkbox' || $productOption->getType() == 'image') { $this->saveOptionValues($product, $productOption, $productOptionsExisted); } } }