/** * Perform actions before object save * * @param \Magento\Framework\Model\AbstractModel $object * @return \Magento\Framework\Model\Resource\Db\AbstractDb */ protected function _beforeSave(\Magento\Framework\Model\AbstractModel $object) { if (!$object->getSortOrder()) { $object->setSortOrder($this->_getMaxSortOrder($object) + 1); } return parent::_beforeSave($object); }
/** * Save in set including * * @param AbstractModel $object * @param null $attributeEntityId * @param null $attributeSetId * @param null $attributeGroupId * @param null $attributeSortOrder * @return $this * @SuppressWarnings(PHPMD.NPathComplexity) */ public function saveInSetIncluding(AbstractModel $object, $attributeEntityId = null, $attributeSetId = null, $attributeGroupId = null, $attributeSortOrder = null) { $attributeId = $attributeEntityId === null ? (int) $object->getId() : (int) $attributeEntityId; $setId = $attributeSetId === null ? (int) $object->getAttributeSetId() : (int) $attributeSetId; $groupId = $attributeGroupId === null ? (int) $object->getAttributeGroupId() : (int) $attributeGroupId; $attributeSortOrder = $attributeSortOrder === null ? (int) $object->getSortOrder() : (int) $attributeSortOrder; if ($setId && $groupId && $object->getEntityTypeId()) { $connection = $this->getConnection(); $table = $this->getTable('eav_entity_attribute'); $sortOrder = $attributeSortOrder ?: $this->_getMaxSortOrder($object) + 1; $data = ['entity_type_id' => $object->getEntityTypeId(), 'attribute_set_id' => $setId, 'attribute_group_id' => $groupId, 'attribute_id' => $attributeId, 'sort_order' => $sortOrder]; $where = ['attribute_id =?' => $attributeId, 'attribute_set_id =?' => $setId]; $connection->delete($table, $where); $connection->insert($table, $data); } return $this; }
/** * Save attribute/form relations after attribute save * * @param \Magento\Framework\Model\AbstractModel $object * @return $this */ protected function _afterSave(AbstractModel $object) { $forms = $object->getData('used_in_forms'); $adapter = $this->_getWriteAdapter(); if (is_array($forms)) { $where = array('attribute_id=?' => $object->getId()); $adapter->delete($this->_getFormAttributeTable(), $where); $data = array(); foreach ($forms as $formCode) { $data[] = array('form_code' => $formCode, 'attribute_id' => (int) $object->getId()); } if ($data) { $adapter->insertMultiple($this->_getFormAttributeTable(), $data); } } // update sort order if (!$object->isObjectNew() && $object->dataHasChangedFor('sort_order')) { $data = array('sort_order' => $object->getSortOrder()); $where = array('attribute_id=?' => (int) $object->getId()); $adapter->update($this->getTable('eav_entity_attribute'), $data, $where); } // save scope attributes $websiteId = (int) $object->getWebsite()->getId(); if ($websiteId) { $table = $this->_getEavWebsiteTable(); $describe = $this->_getReadAdapter()->describeTable($table); $data = array(); if (!$object->getScopeWebsiteId() || $object->getScopeWebsiteId() != $websiteId) { $data = $this->getScopeValues($object); } $data['attribute_id'] = (int) $object->getId(); $data['website_id'] = (int) $websiteId; unset($describe['attribute_id']); unset($describe['website_id']); $updateColumns = array(); foreach (array_keys($describe) as $columnName) { $data[$columnName] = $object->getData('scope_' . $columnName); $updateColumns[] = $columnName; } $adapter->insertOnDuplicate($table, $data, $updateColumns); } return parent::_afterSave($object); }
/** * Save in set including * * @param AbstractModel $object * @return $this */ public function saveInSetIncluding(AbstractModel $object) { $attributeId = (int) $object->getId(); $setId = (int) $object->getAttributeSetId(); $groupId = (int) $object->getAttributeGroupId(); if ($setId && $groupId && $object->getEntityTypeId()) { $adapter = $this->_getWriteAdapter(); $table = $this->getTable('eav_entity_attribute'); $sortOrder = $object->getSortOrder() ?: $this->_getMaxSortOrder($object) + 1; $data = array('entity_type_id' => $object->getEntityTypeId(), 'attribute_set_id' => $setId, 'attribute_group_id' => $groupId, 'attribute_id' => $attributeId, 'sort_order' => $sortOrder); $where = array('attribute_id =?' => $attributeId, 'attribute_set_id =?' => $setId); $adapter->delete($table, $where); $adapter->insert($table, $data); } return $this; }