Как оставить в коллекции только объекты с непустым значением конкретного свойства?

[16 июля 2019 г.]    Российская сборка Magento 2.52.2
Magento 2: модули и услуги
magereport.com: составление перечня необходимых для установки заплаток SUPEE
#1 Сергей Киев
  • Группа: Пользователь
  • Сообщений: 28
  • Регистрация: 09.02.2011

12.05.2011 11:00

есть файл grid.php - отображение информации в колонках с БД

в конструкторе ставится условие...
  public function __construct()
    {        
         
       //  print_r($_GET);
        parent::__construct();
        $this->setId('productGrid');
        $this->setDefaultSort('entity_id');
       // $this->setDefaultFilter('entity_id>38');
        $this->setDefaultDir('asc');
   

        //$this->setVarNameFilter('product_filter');
        $this->setSaveParametersInSession(true);
        //$this->setUseAjax(true);

    }


у меня есть атрибут к товару seller_customer_name, есть товары без этого атрибута... как мне вывести все товара seller_customer_name != "" где он не равно пустоте....

Для этой таблицы это является постоянным условием

#2 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8995
  • Регистрация: 20.02.2010

12.05.2011 15:05

Вам надо заложить данное условие на этапе формирования коллекции товаров.

#3 Сергей Киев
  • Группа: Пользователь
  • Сообщений: 28
  • Регистрация: 09.02.2011

12.05.2011 15:50

  protected function _prepareCollection()
    {
        
        $store = $this->_getStore();
          
        $collection = Mage::getModel('catalog/product')->getCollection();
        $collection->addAttributeToSelect('sku')
            ->addAttributeToSelect('seller_customer_name')
            ->addAttributeToSelect('name')
            ->addAttributeToSelect('attribute_set_id')
            ->addAttributeToSelect('type_id')
            ->joinField('qty',
                'cataloginventory/stock_item',
                'qty',
                'product_id=entity_id',
                '{{table}}.stock_id=1',
                'left')
  
            ;  

        if ($store->getId()) {
            //$collection->setStoreId($store->getId());
            $adminStore = Mage_Core_Model_App::ADMIN_STORE_ID;
            $collection->addStoreFilter($store);

            $collection->joinAttribute('name', 'catalog_product/name', 'entity_id', null, 'inner', $adminStore);
            $collection->joinAttribute('custom_name', 'catalog_product/name', 'entity_id', null, 'inner', $store->getId());
            $collection->joinAttribute('status', 'catalog_product/status', 'entity_id', null, 'inner', $store->getId());
            $collection->joinAttribute('visibility', 'catalog_product/visibility', 'entity_id', null, 'inner', $store->getId());
            $collection->joinAttribute('price', 'catalog_product/price', 'entity_id', null, 'left', $store->getId());
        }
        else {
            $collection->addAttributeToSelect('price');
            $collection->joinAttribute('status', 'catalog_product/status', 'entity_id', null, 'inner');
            $collection->joinAttribute('visibility', 'catalog_product/visibility', 'entity_id', null, 'inner');
        }
        
        $this->setCollection($collection);

        parent::_prepareCollection();
        $this->getCollection()->addWebsiteNamesToResult();
        return $this;
    }


если я правильно понял то где то здесь? не могли бы вы помочь примером?

#4 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8995
  • Регистрация: 20.02.2010

12.05.2011 16:44

Упорядочивание, сортировка, фильтрация, поиск товаров

#5 Сергей Киев
  • Группа: Пользователь
  • Сообщений: 28
  • Регистрация: 09.02.2011

13.05.2011 14:14

как тогда поставить условие

 $collection->addAttributeToFilter(array( 
array('attribute'=>'seller_customer_name', 'date'=>'ХХХХХХ')) 
);


Мне нужно вывести все значения где seller_customer_name != ""

addAttributeToFilter как реализовать здесь ?

#6 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8995
  • Регистрация: 20.02.2010

13.05.2011 14:34

Например:
$collection->addAttributeToFilter('seller_customer_name', 'notnull');


Или, если у вас в базе данных пустое значение кодируется не как NULL, а как строка нулевой длины:
$collection->addAttributeToFilter('seller_customer_name', array ('neq' => ''));


#7 Сергей Киев
  • Группа: Пользователь
  • Сообщений: 28
  • Регистрация: 09.02.2011

13.05.2011 15:01

спасибо, все заработало

Поделиться темой: