Возникла сложность на последнем этапе - заполнение таблицы значений свойств товаров. Таблица значений свойств товаров это промежуточная таблица товаров и свойств, которая к тому же еще помимо id товара и id свойства содержит три поля со значениями (строка, число и булево). Скрипт выполняется ровно 10 минут на этом этапе и вылетает. До этого отработал без проблем 20 минут при заполнении таблицы товаров.
Подскажите, как можно оптимизировать данный алгоритм?
Код: Выделить всё
public function pushProductsProperties($products_properties = [])
{
foreach($products_properties as $key => $value){
$product = Products::find()->select(['id'])->where(['code' => $value['Номенклатура']])->one();
if(!$product){
continue;
}
foreach($value['ЗначенияСвойств'] as $k => $v){
$property = Properties::find()->select(['id', 'type'])->where(['code' => $v['Свойство']])->one();
$product_property = ProductsProperties::findOne(['product_id' => $product->id, 'property_id' => $property->id]);
if(!$product_property){
$product_property = new ProductsProperties();
}
$product_property->product_id = $product->id;
$product_property->property_id = $property->id;
if($property->type == 1){
$product_property->body = $v['Значение'];
}elseif($property->type == 2){
$product_property->number = $v['Значение'];
}elseif($property->type == 3){
$product_property->bool = $v['Значение'];
}
if($product_property->save()){
unset($product_property);
continue;
}else{
return 'Ошибка сохранения свойства товара - '.$v['Свойство'].', товар - '.$value['Номенклатура'];
}
}
}
return 'Операция успешно выполнена';
}
Код: Выделить всё
{
"Номенклатура": "НФ-00021868",
"ЗначенияСвойств": [
{
"Свойство": "8f9467c3-7dc6-11e7-b977-ec086b039f00",
"Значение": "РСВ-53054"
},
{
"Свойство": "9165dc09-8959-11e7-b977-ec086b039f00",
"Значение": "TARKETT"
},
{
"Свойство": "d85ac254-8cb9-11e7-b977-ec086b039f00",
"Значение": "линолеум"
},
{
"Свойство": "d85ac255-8cb9-11e7-b977-ec086b039f00",
"Значение": "Акрон 6"
},
{
"Свойство": "a7847d58-8d5f-11e7-b977-ec086b039f00",
"Значение": 300
},
{
"Свойство": "a7847d5b-8d5f-11e7-b977-ec086b039f00",
"Значение": "Общественные и жилые помещения "
},
{
"Свойство": "a7847d5c-8d5f-11e7-b977-ec086b039f00",
"Значение": "Вспененный ПВХ "
},
{
"Свойство": "a7847d5e-8d5f-11e7-b977-ec086b039f00",
"Значение": "серый"
},
{
"Свойство": "a7847d5f-8d5f-11e7-b977-ec086b039f00",
"Значение": "Сербия"
},
{
"Свойство": "d60a9d27-25e4-11e8-87ed-ec086b039f00",
"Значение": 0.3
}
]
},