Magento addFieldToFilter:两个字段,匹配为 OR,而不是 AND

2022-08-30 11:14:58

在过去的几个小时里,我一直被困在这个上面。我通过在 中破解几行来使它工作,但我宁愿使用适当的解决方案并保持我的核心不变。/lib/Varien/Data/Collection/Db.php

我需要做的就是获取一个集合并按两个或多个字段进行筛选。说,和 .这是我的(没有黑客攻击的不起作用)代码:customer_firstnameremote_ipDb.php

$collection = Mage::getModel('sales/order')->getCollection()->
addAttributeToSelect("*")->
addFieldToFilter(array(array('remote_ip', array('eq'=>'127.0.0.1')),
array('customer_firstname', array('eq'=>'gabe'))), array('eq'=>array(1,2,3)));

用股票,我尝试了这个:(取自 http://magentoexpert.blogspot.com/2009/12/retrieve-products-with-specific.htmlDb.php)

$collection->addFieldToFilter(array(
    array('name'=>'orig_price','eq'=>'Widget A'),
    array('name'=>'orig_price','eq'=>'Widget B'),           
));

但这给了我这个错误:

Warning: Illegal offset type in isset or empty  in magento/lib/Varien/Data/Collection/Db.php on line 369

如果我用try/catch包装它,那么它会移动到_getConditionSql()中并给出这个错误:

Warning: Invalid argument supplied for foreach()  in magento/lib/Varien/Data/Collection/Db.php on line 412

有没有人有任何工作,功能代码来做到这一点?我正在运行Magento 1.9(企业)。谢谢!


答案 1

我有另一种方法可以在字段中添加条件:or

->addFieldToFilter(
    array('title', 'content'),
    array(
        array('like'=>'%$titlesearchtext%'), 
        array('like'=>'%$contentsearchtext%')
    )
)

答案 2

OR 条件可以生成如下:

$collection->addFieldToFilter(
    array('field_1', 'field_2', 'field_3'), // columns
    array( // conditions
        array( // conditions for field_1
            array('in' => array('text_1', 'text_2', 'text_3')),
            array('like' => '%text')
        ),
        array('eq' => 'exact'), // condition for field 2
        array('in' => array('val_1', 'val_2')) // condition for field 3
    )
);

这将生成一个 SQL WHERE 条件,如下所示:

... WHERE (
         (field_1 IN ('text_1', 'text_2', 'text_3') OR field_1 LIKE '%text')
      OR (field_2 = 'exact')
      OR (field_3 IN ('val_1', 'val_2'))
    )

每个嵌套数组(<条件>)为 OR 条件生成另一组括号。


推荐