Subject. Which classes I need to use to deal with it?
It seems that I don't understand much about how attributes work.
For example I use this code to add attribute to one attribute set and to one attribute group:
/** @var $attribute \Magento\Catalog\Model\ResourceModel\Eav\Attribute */
$attribute->setAttributeSetId($attributeSetId);
$attribute->setAttributeGroupId($groupId);
Thanks.
UPD:
My problem not in 'how to get attribute set ids', I already have a few. I'm more interesting in the part of code where // add your code here.
I think if we set the value by method $attribute->setAttributeSetId(), it override previous attribute set link in the attribute. I'm trying to find some solution like $attribute->addAttributeSetId() or $attribute->setAttributeSetIds(), but there are none
UPD2:
Found the way: Using \Magento\Eav\Api\AttributeManagementInterface->assign(). Full code in answer below.
2 Answers 2
Found a simple solution.
my method:
public function assignAttributeToSets($attribute_code, $attribute_set_ids) {
foreach ($attribute_set_ids as $set_id) {
$group_id = $this->config->getAttributeGroupId($set_id, 'Product Details');
$this->attributeManagement->assign(
'catalog_product', // entity type code
$set_id,
$group_id,
$attribute_code,
null
);
}
}
And constructor:
public function __construct(
\Magento\Catalog\Model\Config $config,
\Magento\Eav\Api\AttributeManagementInterface $attributeManagement
)
{
$this->config = $config;
$this->attributeManagement = $attributeManagement;
}
Try following way:
/**
* EAV setup factory
*
* @var \Magento\Eav\Setup\EavSetupFactory
*/
private $eavSetupFactory;
/**
* Init
*
* @param \Magento\Eav\Setup\EavSetupFactory $eavSetupFactory
*/
public function __construct(\Magento\Eav\Setup\EavSetup\Factory $eavSetupFactory)
{
$this->eavSetupFactory = $eavSetupFactory;
}
And now
/** @var \Magento\Eav\Setup\EavSetup $eavSetup */
$eavSetup = $this->eavSetupFactory->create(['setup' => $setup]);
$entityTypeId = $eavSetup->getEntityTypeId(\Magento\Catalog\Model\Product::ENTITY);
$attributeSetIds = $eavSetup->getAllAttributeSetIds($entityTypeId);
foreach ( $attributeSetIds as $attributeSetId) {
// add your code here
}
[Update]
Check following class
Magento/Eav/Setup/EavSetup.php
Here you can see your desire method like
getAttributeSetId() getAttributeGroupId()
So using previous example you can access these method using $eavSetup object. like
$eavSetup->getAttributeSetId($entityTypeId, $setId) $eavSetup->getAttributeGroupId($entityTypeId, $setId, $groupId)
For update attribute set use
updateAttributeSet()
-
Check updated answer.Sohel Rana– Sohel Rana2017年05月03日 06:23:03 +00:00Commented May 3, 2017 at 6:23
Explore related questions
See similar questions with these tags.