如何在joinField中使用Zend Framework Magento中的where查询

时间:2017-10-30 15:57:12

标签: php magento zend-framework

我有一个查询,它会过滤Products Module的列名。

这是我的准备栏

protected function _prepareColumns()
{
   $this->addColumn('name',
        array(
            'header'=> Mage::helper('catalog')->__('Name'),
            'index' => 'name',

    ));

   return parent::_prepareColumns();
}

现在这里是过滤功能

protected function _addColumnFilterToCollection($column)
{
    if ($this->getCollection()) {
        if ($column->getId() == 'websites') {
            $this->getCollection()
                 ->joinField('websites',
                'catalog/product_website',
                'website_id',
                'product_id=entity_id',
                null,
                'left');
        }
    }
    return parent::_addColumnFilterToCollection($column);
}

但如果项目名称为DOG SILVER CHAIN

如果我搜索DOG CHAIN

它不会返回DOG SILVER CHAIN

如何使过滤动态化并且必须接受复杂数据。

谢谢

1 个答案:

答案 0 :(得分:0)

使用filter_condition_callback。您可以在Mage\Adminhtml\Block\Cms\Page\Grid中看到一个示例。以下是您如何使用它:

$this->addColumn('name',
    array(
        'header'=> Mage::helper('catalog')->__('Name'),
        'index' => 'name',
        'filter_condition_callback' => array($this, '_filterNameCondition')
));

然后添加过滤器函数,该函数将值分解为单词并为每个单词添加条件:

protected function _filterNameCondition($collection, $column) {
    if(!$value = $column->getFilter()->getValue()) {
        return;
    }
    $field = ($column->getFilterIndex()) ? $column->getFilterIndex() : $column->getIndex();

    $collection->joinAttribute($field, 'catalog_product/name', 'entity_id', null, 'inner');

    foreach(explode(' ', $value) as $word) {
        $collection->addAttributeToFilter($field, array('like'=>'%'.$word.'%'));
    }
}