protected function saveInternal() { $itemPropClass = Kiwi::getItemPropClass(); $itemPropValueClass = Kiwi::getItemPropValueClass(); foreach ($this->itemProps as $key => $itemProp) { if ($value = $this->{$key}) { switch ($itemProp->type) { case $itemPropClass::ITEM_PROP_TYPE_TEXT: if (isset($this->itemPropValues[$key])) { $itemPropValue = $this->itemPropValues[$key]; } else { $itemPropValue = Kiwi::getItemPropValue(); $itemPropValue->item_id = $this->itemId; $itemPropValue->item_prop_id = $itemProp->item_prop_id; } $itemPropValue->custom_prop_value = $value; if (!$itemPropValue->save()) { $this->addError($key, Json::encode($itemPropValue->getErrors())); } break; case $itemPropClass::ITEM_PROP_TYPE_SELECT: if (isset($this->itemPropValues[$key])) { $itemPropValue = $this->itemPropValues[$key]; } else { $itemPropValue = Kiwi::getItemPropValue(); $itemPropValue->item_id = $this->itemId; $itemPropValue->item_prop_id = $itemProp->item_prop_id; } $itemPropValue->prop_value_id = $value; if (!$itemPropValue->save()) { $this->addError($key, Json::encode($itemPropValue->getErrors())); } break; case $itemPropClass::ITEM_PROP_TYPE_CHECKBOX: if (isset($this->itemPropValues[$key])) { $itemPropValue = $this->itemPropValues[$key]; } else { $itemPropValue = []; } $propValueIds = array_keys($itemPropValue); $toAdd = array_diff($value, $propValueIds); foreach ($toAdd as $propValueId) { $itemPropValue = Kiwi::getItemPropValue(); $itemPropValue->item_id = $this->itemId; $itemPropValue->item_prop_id = $itemProp->item_prop_id; $itemPropValue->prop_value_id = $propValueId; if (!$itemPropValue->save()) { $this->addError($key, Json::encode($itemPropValue->getErrors())); } } $toDel = array_diff($propValueIds, $value); $itemPropValueClass::deleteAll(['item_id' => $this->itemId, 'item_prop_id' => $itemProp->item_prop_id, 'prop_value_id' => $toDel]); break; default: break; } } else { $itemPropValueClass::deleteAll(['item_id' => $this->itemId, 'item_prop_id' => $itemProp->item_prop_id]); } } return !$this->hasErrors(); }
/** * @return \yii\db\ActiveQuery */ public function getItemPropValues() { return $this->hasMany(Kiwi::getItemPropValueClass(), ['item_prop_id' => 'item_prop_id']); }