joinWith(['variants'])->where(['!=', ProductVariant::tableName() .'.stock', 0])->select('product.product_id')->all(); $products = Product::find() ->with(['variantsWithFilters','brand','categories','filters'])->all(); $count = count($products); for ($i=0; $i<=$count; $i++) { $i++; /*if ($i>1e2) { break; }*/ $mods = []; $filterString = $this->convertFilterToString($products[$i]->filters); foreach ($products[$i]->variantsWithFilters as $variant) { $color = $variant->name; $mods[] = $variant->sku . '=' . $this->convertFilterToString($variant->filters) . '=' . $color . '=' . ((!empty($variant->image)) ? $variant->image->image: ''). '=' . $variant->stock; } $fotos = []; // foreach ($product->images as $image) // { // $fotos[] = $image->imageUrl; // } // $filters = $product->properties; $categories = []; foreach($products[$i]->categories as $value){ $categories[] = $value->name; } $categories = implode(',',$categories); $list = [ $categories, $products[$i]->brand->name, $products[$i]->name, '', ((! empty($products[$i]->description)) ? $products[$i]->description : ''), $filterString, (!empty($products[$i]->variant)) ? $products[$i]->variant->price_old : '', (!empty($products[$i]->variant)) ? $products[$i]->variant->price : '', intval($products[$i]->akciya), '', intval($products[$i]->is_new), intval($products[$i]->is_top), $products[$i]->video, implode (',', $fotos), ]; $to_write = array_merge ($list, $mods); foreach($to_write as &$cell) { $cell = iconv("UTF-8", "WINDOWS-1251", $cell); } fputcsv($handle, $to_write, ';'); unset($products[$i]); } fclose ($handle); return $dirName .'/'. $filename; } public function convertFilterToString($filters){ $fittersArray = []; foreach($filters as $filter){ $fittersArray[$filter->taxGroup->alias][] = $filter->name; unset($filter); } $filterString=[]; foreach($fittersArray as $filterName =>$filterRows ){ $row = implode(',',$filterRows); $filterString[] = "[{$filterName}:{$row}]"; } return implode('*',$filterString); } }