gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 23:56:02 25 4
gpt4 key购买 nike

我已经设法用 addFieldToFilter 做到了这一点像这样的默认功能:

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

这在我打印 sql 时有效(这只是打印的整个语句的一部分):
((first_name = 'r') OR (last_name = 't'))

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

您的时间和答案非常感谢您。

最佳答案

这很奇怪,但是在对您的问题进行了一些研究之后,解决方案非常简单 - 它在 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 条件,那么您必须为 addAttributeToFilter() 提供参数以这种方式方法,所以在你的情况下:
$collection->addFieldToFilter(
array(
array('attribute'=>'firstname', 'like'=>$post['firstName']),
array('attribute'=>'lastname', 'like'=>$post['lastName'])
));

如果您查看 addAttributeToFilter() 内部,您可以按照此操作进行操作。方法:
if (is_array($attribute)) {
$sqlArr = array();
foreach ($attribute as $condition) {
$sqlArr[] = $this->_getAttributeConditionSql($condition['attribute'], $condition, $joinType);
}
$conditionSql = '('.implode(') OR (', $sqlArr).')';

关于magento - 如何在自定义模块的 magento 收集过滤器中使用 'like' 而不是 '=',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16748995/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com