public function handle(CreateBehaviorDO $do) { \DB::transaction(function () use($do) { $entity = new Model(); $entity->attributeSet()->associate($this->loadAttributeSetById($do->attribute_set_id)); $entity->representation()->associate($this->loadRepresentationEntity($do->representation_id)); $entity->name = $do->name; $entity->label = $do->label; $entity->default_value = $do->default_value; $entity->max_values_count = $do->max_values_count; $entity->required_create = $do->required_create; $entity->required_order = $do->required_order; $entity->save(); if (count($do->options)) { foreach ($do->options as $optionDO) { $optionEntity = $this->optionEntity($optionDO); $entity->options()->save($optionEntity); foreach ($optionDO->values as $valueDO) { $valueEntity = $this->valueEntity(AttributeOptionModel::OBJECT_TYPE, $valueDO); $optionEntity->values()->save($valueEntity); } } $entity->options()->save($optionEntity); } if (count($do->values)) { foreach ($do->values as $valueDO) { $entity->objectValues()->save($this->valueEntity(Model::OBJECT_TYPE, $valueDO)); } } }); }