我已设法使用addFieldToFilter
默认功能执行此操作:
$collection->addFieldToFilter(
array('first_name','last_name'),
array($post['firstName'],$post['lastName'])
);
当我打印sql时这是有效的(这只是打印整个语句的一部分):
((first_name = 'r') OR (last_name = 't'))
现在我想了解如何使用'like'
代替=
。
需要一些帮助来理解这一点。
您的时间和答案都非常谨慎,谢谢。
答案 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%')) ...