Как получить идентификатор пользовательского набора атрибутов по имени


Я создал пару пользовательских наборов атрибутов , и теперь я хочу программно назначить группу в этих наборах атрибутов, так есть ли способ получить идентификаторы наборов атрибутов на основе имени?

Author: Nausif, 2017-02-16

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");

 6
Author: Rizwan Dhuka, 2017-02-16 13:32:17

Основываясь на ответе Ризвана Дуки, вы можете:

  • Уменьшите размер ответа с помощью 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    |
    '------------------------------------------------------------'
    

    источник: 3v4l.org/uRTNh


  • $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    | 
    '------------------------------------------------------------'
    

источник: 3v4l.org/8Yq6j

 7
Author: Nolwennig, 2018-04-03 13:22:02