gpt4 book ai didi

php - Magento 使用集合进行 (OR)

转载 作者:搜寻专家 更新时间:2023-10-31 21:18:15 25 4
gpt4 key购买 nike

我有一个带有自定义表的自定义模块,现在,我正在尝试为该表制作类似过滤器的东西,

Mage::getModel('comunity/news')->getCollection()
->addFieldToFilter('title', array('like'=>'%'.$this->getRequest()->getParam('q').'%'));

有了这个就足够了,而且效果很好,但我需要添加另一个字段,如果你这样做就很简单

Mage::getModel('comunity/news')->getCollection()
->addFieldToFilter('title', array('like'=>'%'.$this->getRequest()->getParam('q').'%'))
->addFieldToFilter('shortdesc', array('like'=>'%'.$this->getRequest()->getParam('q').'%'));

它有效,但它生成一个 (AND),我想要一个 (OR),我正在查看 Varien_Data_Collection_Db 类,函数 addFieldToFilter 调用 _getConditionSql,您可以在其中看到类似的内容

        if (is_array($fieldName)) {
foreach ($fieldName as $f) {
$orSql = array();
foreach ($condition as $orCondition) {
$orSql[] = '('.$this->_getConditionSql($f[0], $f[1]).')';
}
$sql = '('. join(' or ', $orSql) .')';
}
return $sql;
}

这里可以做一个(或),我试过

->addFieldToFilter(array (
array('field'=>'title', 'like'=>'%'.$this->getRequest()->getParam('q').'%'),
array('field'=>'shortdesc', 'like'=>'%'.$this->getRequest()->getParam('q').'%'),
))

但是它的查询是

SELECT `main_table`.* FROM `uhma_comunidad_articulos` AS `main_table` WHERE (())

我需要一些帮助谢谢

最佳答案

我认为问题在于您需要使用 addAttributeToFilter 而不是 addFieldToFilter。查看 Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Collection,您会看到 addAttributeToFilter 方法正在测试一个数组,然后添加为 OR:

if (is_array($attribute)) {
$sqlArr = array();
foreach ($attribute as $condition) {
$sqlArr[] = $this->_getAttributeConditionSql($condition['attribute'], $condition, $joinType);
}
$conditionSql = '('.join(') OR (', $sqlArr).')';
$this->getSelect()->where($conditionSql);
return $this;
}
Varien_Data_Collection_Db 中的

addFieldToFilter 只是将字段添加到 where 而无需测试数组。


编辑

刚刚注意到您在您自己的自定义模块的集合上使用它,而不是 Mage 产品集合。这意味着您需要在 Model\mysql4\News\ 下的 Collection.php 中自己实现 addAttributeToFilter 方法。或者,代替 Varien_Data_Collection_Db,让您的 Collection 扩展 Mage_Eav_Model_Entity_Collection_Abstract,其中已经包含实现。

喂,京东

关于php - Magento 使用集合进行 (OR),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3702384/

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