Как получить идентификатор пользовательского набора атрибутов по имени
Я создал пару пользовательских наборов атрибутов , и теперь я хочу программно назначить группу в этих наборах атрибутов, так есть ли способ получить идентификаторы наборов атрибутов на основе имени?
2 answers
Вы можете получить идентификатор набора атрибутов, используя следующий код:
protected $_attributeSetCollection;
public function __construct(
...
,\Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory $attributeSetCollection
)
{
...
$this->_attributeSetCollection = $attributeSetCollection;
}
public function getAttrSetId($attrSetName)
{
$attributeSet = $this->_attributeSetCollection->create()->addFieldToSelect(
'*'
)->addFieldToFilter(
'attribute_set_name',
$attrSetName
);
$attributeSetId = 0;
foreach($attributeSet as $attr):
$attributeSetId = $attr->getAttributeSetId();
endforeach;
return $attributeSetId;
}
Вы можете вызвать метод getattrsetid, передав имя набора атрибутов, для которого вы хотите получить идентификатор набора атрибутов.
например. $this->getAttrSetId("YourAttributeSetName");
Основываясь на ответе Ризвана Дуки, вы можете:
Уменьшите размер ответа с помощью select
'attribute_set_id'
вместо'*'
-
Избегайте цикла на объекте с помощью комбинированных методов
getFirstItem
иtoArray
namespace Nolwennig\CustomCatalog; use \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory; class CustomProduct { protected $_attributeSetCollection; /** * * ... * @param AttributeSetCollectionFactory $attributeSetCollection */ public function __construct(..., CollectionFactory $attributeSetCollection) { ... $this->_attributeSetCollection = $attributeSetCollection; } /** * * @param string $attributeSetName * @return int attributeSetId */ public function getAttributeSetId($attributeSetName) { $attributeSetCollection = $this->_attributeSetCollection->create() ->addFieldToSelect('attribute_set_id') ->addFieldToFilter('attribute_set_name', $attributeSetName) ->getFirstItem() ->toArray(); $attributeSetId = (int) $attributeSetCollection['attribute_set_id']; // OR (see benchmark below for make your choice) $attributeSetId = (int) implode($attributeSetCollection); return $attributeSetId } }
Быстрые (не грязные?) тесты
$attributeSetId = (int) implode($attributeSetCollection);
.------------------------------------------------------------. | Version | System time (s) | User time (s) | Memory (MiB) | |-----------+-----------------+---------------+--------------| | 7.2 | 0.035 | 0.012 | 17.96 | | 7.1 | 0.050 | 0.012 | 20.98 | | hhvm | 0.088 | 0.234 | 88.93 | | 5.6 | 0.017 | 0.061 | 20.59 | '------------------------------------------------------------'
$attributeSetId = $attributeSetCollection['attribute_set_id'];
.------------------------------------------------------------. | Version | System time (s) | User time (s) | Memory (MiB) | |-----------+-----------------+---------------+--------------| | 7.2 | 0.128 | 0.011 | 17.55 | | 7.1 | 0.131 | 0.011 | 20.86 | | hhvm | 0.100 | 0.204 | 88.75 | | 5.6 | 0.017 | 0.060 | 20.64 | '------------------------------------------------------------'