如何在自定义模块的magento集合过滤器中使用'like'而不是'='

时间:2013-05-25 11:18:30

标签: magento magento-1.7

我已设法使用addFieldToFilter默认功能执行此操作:

$collection->addFieldToFilter(
    array('first_name','last_name'),
    array($post['firstName'],$post['lastName'])             
);

当我打印sql时这是有效的(这只是打印整个语句的一部分):

((first_name = 'r') OR (last_name = 't'))

现在我想了解如何使用'like'代替=。 需要一些帮助来理解这一点。

您的时间和答案都非常谨慎,谢谢。

3 个答案:

答案 0 :(得分:3)

这很奇怪,但在对你的问题进行一些研究后,解决方案非常简单 - 它在Magento代码的评论中给出:

addAttributeToFilter()中的方法Mage/Eav/Model/Entity/Collection/Abstract.php的评论中(最终被调用),您可以阅读:

/**
 * Add attribute filter to collection
 *
 * If $attribute is an array will add OR condition with following format:
 * array(
 *     array('attribute'=>'firstname', 'like'=>'test%'),
 *     array('attribute'=>'lastname', 'like'=>'test%'),
 * )
 */

我不太清楚这是什么意思,但它很简单:如果你想在语句中的属性之间添加OR条件,那么你必须为{{1}提供参数这样的方法,所以在你的情况下:

addAttributeToFilter()

如果查看$collection->addFieldToFilter( array( array('attribute'=>'firstname', 'like'=>$post['firstName']), array('attribute'=>'lastname', 'like'=>$post['lastName']) )); 方法,可以按照以下步骤操作:

addAttributeToFilter()

答案 1 :(得分:2)

addFieldToFilter( 'sku', array( "like"=>'abc123' ) )

在这里,您可以阅读更多有关Magento系列的信息:http://alanstorm.com/magento_collections

例如,请参阅本文中名为" AND或OR的部分,或者是OR和AND?"

答案 2 :(得分:1)

对于你们来说,googlers的方法是:

$collection->addFieldToFilter(
    array('first_name','last_name'),
    array(
        array('like' => '%'.$post['firstName'].'%'),
        array('like' => '%.'$post['lastName'].'%')
    )             
);

您应该传递一组字段和一系列条件。

生成的SQL:

... WHERE ((first_name LIKE '%xxxx%') OR (last_name LIKE '%yyy%')) ...