Magento:组合eq并在addAttributeToFilter中为null

时间:2011-09-06 13:27:50

标签: magento

我想与OR结合使用“is null”和“eq”=>阵列()

$collection->addAttributeToFilter('attributename', array('is' => null));
$collection->addAttributeToFilter('attributename', array(115,116));

但这不起作用。

3 个答案:

答案 0 :(得分:12)

要使用addAttributeToFilter() OR条件,您可以传递一系列数组:

$collection->addAttributeToFilter(
    array(
        array(
            'attribute' => 'name_of_attribute_1',
            'null' => 'this_value_doesnt_matter'
        ),
        array(
            'attribute' => 'name_of_attribute_2',
            'in' => array(115, 116)
        )
    )
);

NULL个关键字进行过滤的定义乍一看可能看起来有点令人困惑,但一旦你习惯了,它就很简单了。

Magento支持两种类型string的过滤器类型,即'null''notnull',用于与NULL个关键字进行比较。

请注意,即使您需要传递key =>值对(因为使用了关联数组),当过滤器类型'null''notnull'为时,将始终忽略该值使用

实施例

var_dump(
    Mage::getModel('catalog/product')
    ->getCollection()
    ->addFieldToFilter(
        array(
            array(
                'attribute' => 'description',
                'null' => 'this_value_doesnt_matter'
            ),
            array(
                'attribute' => 'sku',
                'in' => array(115, 116)
            )
         )
     )
     ->getSelectSql(true)
 );

转储的输出可能因商店配置(属性ID,商店数量等)而异,但OR子句中的WHERE逻辑应始终保持不变:< / p>

SELECT 
    `e`.*,
    IFNULL(_table_description.value, _table_description_default.value) AS `description`
FROM
    `catalog_product_entity` AS `e`
INNER JOIN
    `catalog_product_entity_text` AS `_table_description_default` ON
    (_table_description_default.entity_id = e.entity_id) AND
    (_table_description_default.attribute_id='57') AND
    _table_description_default.store_id=0
LEFT JOIN
    `catalog_product_entity_text` AS `_table_description` ON
    (_table_description.entity_id = e.entity_id) AND
    (_table_description.attribute_id='57') AND
    (_table_description.store_id='1')
WHERE (
    (IFNULL(_table_description.value, _table_description_default.value) is NULL) OR
    (e.sku in (115, 116))
)

答案 1 :(得分:0)

  • 我的产品属性is_expired带有“是”和“否”值,我只想要那些产品没有值。对我来说,查询工作得到neq 1而非null的记录。

    • 将OR不等于和null条件。

       $collection->addAttributeToFilter('attribue_name', array('or'=> array(
           0 => array( 'neq' => '1'),
           1 => array('is' => new Zend_Db_Expr('null')))
       ), 'left');
      
  • 您可以使用neq更改eq

答案 2 :(得分:-1)

将addAttributeToFilter与OR条件 一起使用并使用左连接 你可以这样做:

$collection->addAttributeToFilter(
    array(
        array('attribute' => 'name_of_attribute_1','null' => 'this_value_doesnt_matter'),
        array('attribute' => 'name_of_attribute_2','in' => array(115, 116))
        )
     '',
    'left'
);