/** * @param Variable\Variation $variation Variation to add. */ public function addVariation(Product\Variable\Variation $variation) { $this->variations[$variation->getId()] = $variation; }
/** * @param $product VariableProduct Product to fetch variations for. * * @return array List of variations. */ public function getVariations($product) { $wpdb = $this->wp->getWPDB(); $query = $wpdb->prepare("\n\t\t\tSELECT pv.ID, pva.* FROM {$wpdb->posts} pv\n\t\t\t\tLEFT JOIN {$wpdb->prefix}jigoshop_product_variation_attribute pva ON pv.ID = pva.variation_id\n\t\t\t\tWHERE pv.post_parent = %d AND pv.post_type = %s\n\t\t", array($product->getId(), \Jigoshop\Core\Types\Product\Variable::TYPE)); $results = $wpdb->get_results($query, ARRAY_A); $variations = array(); $results = array_filter($results, function ($item) { return $item['attribute_id'] !== null; }); for ($i = 0, $endI = count($results); $i < $endI;) { $variation = new VariableProduct\Variation(); $variation->setId((int) $results[$i]['ID']); $variation->setParent($product); /** @var Product $variableProduct */ $variableProduct = $this->productService->find($results[$i]['ID']); $variation->setProduct($variableProduct); // TODO: Maybe some kind of fetching together? while ($i < $endI && $results[$i]['ID'] == $variation->getId()) { $attribute = new VariableProduct\Attribute(VariableProduct\Attribute::VARIATION_ATTRIBUTE_EXISTS); $attribute->setVariation($variation); $attribute->setAttribute($product->getAttribute($results[$i]['attribute_id'])); $attribute->setValue($results[$i]['value']); if ($attribute->getAttribute() !== null) { $variation->addAttribute($attribute); } $i++; } $variations[$variation->getId()] = $variation; } return $variations; }