Коллекция категорий с фильтром Magento2


Я создал пользовательский раскрывающийся атрибут для категории с кодом атрибута "is_homecategory"

Для его создания использовались следующие методы.

Setup/InstallData.php

  public function install(
        ModuleDataSetupInterface $setup,
        ModuleContextInterface $context
    ) {
        $eavSetup = $this->eavSetupFactory->create(['setup' => $setup]);

        $eavSetup->addAttribute(
            \Magento\Catalog\Model\Category::ENTITY,
            'is_homecategory',
            [
                'type' => 'int',
                'label' => 'Is Home Category',
                'input' => 'select',
                'sort_order' => 333,
                'source' => 'Magento\Eav\Model\Entity\Attribute\Source\Boolean',
                'global' => 1,
                'visible' => true,
                'required' => false,
                'user_defined' => false,
                'default' => '0',
                'group' => 'General Information',
                'backend' => ''
            ]
        );
    }

И view/adminhtml/ui_component/category_from.xml

<fieldset name="general">
        <field name="is_homecategory">
            <argument name="data" xsi:type="array">
            <item name="options" xsi:type="object">Magento\Eav\Model\Entity\Attribute\Source\Boolean</item>
                <item name="config" xsi:type="array">
                    <item name="required" xsi:type="boolean">false</item>
                    <item name="validation" xsi:type="array">
                        <item name="required-entry" xsi:type="boolean">false</item>
                    </item>
                    <item name="sortOrder" xsi:type="number">333</item>
                    <item name="dataType" xsi:type="string">string</item>
                    <item name="formElement" xsi:type="string">select</item>
                    <item name="label" translate="true" xsi:type="string">Is Home Category</item>
                </item>
            </argument>
        </field>
    </fieldset>

, который создается с выпадающим списком "Да/нет" в разделе "Администратор".

Я получаю коллекцию, как показано ниже, в файле по блокам.

class Index extends \Magento\Framework\View\Element\Template {
protected $collectionFactory;
public function __construct(
    \Magento\Catalog\Block\Product\Context $context,
    \Magento\Catalog\Model\ResourceModel\Category $collectionFactory,
    array $data = []) {

    parent::__construct($context, $data);
    $this->collectionFactory = $collectionFactory;
}

public function getCategoryData(){

    $objectManager = \Magento\Framework\App\ObjectManager::getInstance();
    $category = $objectManager->create('Magento\Catalog\Model\ResourceModel\Category\Collection');
    $category->addAttributeToSelect('*')
    ->setPageSize(1)
    ->addAttributeToFilter('is_homecategory',['eq'=>1]
    ->setOrder('updated_at', 'desc')
    );
    return $category;
    /* $categories =   $this->collectionFactory->create()
    ->addAttributeToFilter('is_homecategory',1)->load();
    return categories; */
  }

}

Который не возвращает мне никаких результатов.

Все я ищу, нужно ли мне получить только одну категорию, недавно установленную как is_homecategory, как "Да".

Могу ли я фильтровать коллекцию категорий таким образом? Пожалуйста, кто-нибудь, проверьте это и помогите мне. заранее спасибо.

Author: jafar pinjar, 2018-11-13

1 answers

Вам необходимо заполнить скобку addAttributeToFilter(). Используйте этот код ниже:

$category = $objectManager->create('Magento\Catalog\Model\ResourceModel\Category\Collection');
    $category->addAttributeToSelect('*')
    ->setPageSize(1)
    ->addAttributeToFilter('is_homecategory',['eq'=>1])
    ->setOrder('updated_at', 'desc');

Используйте аргумент по умолчанию в конфигурации для значения по умолчанию

<item name="default" xsi:type="string">1</item>
 2
Author: Rohan Hapani, 2018-11-13 08:05:13