Collection addFieldToFilter 不过滤

Collection addFieldToFilter does not filtering

我有一个 NON-EAV 模型,我想像下面那样过滤它的集合

$td_trans_collection = Mage::getModel('tichdiem/scoretransaction')->getCollection();        
$td_trans_collection->addFieldToFilter('increment_id', $incrementId)
                    ->addFieldToFilter('action', self::TICHDIEM_ADD)
                    ->load();

查询由

产生
 $td_trans_collection->getSelect()->__toString();

return

 SELECT `main_table`.* FROM `fhs_td_score_transaction` AS `main_table` WHERE (increment_id = '100010565') AND (action = '0')

这是一个正确的查询,应该 return 只有 1 个答案。我 运行 在终端上也有这个查询。但是,当我像

这样循环遍历集合时
 foreach($td_trans_collection as $item){
     echo $item;
 }

我的 table 中有所有条目,为什么会这样?我正在使用 Magento 1.9.1

如果您声称您的查询 returns 1 条记录。

遍历集合的正确方法是

foreach($td_trans_collection as $item){
var_dump($item->getData());
}

不要调用 load(),当集合对象中已有所有内容时,您将再次检索所有内容。集合是关联数组,add

首先,测试 select 直接在您的数据库中查询以查看它 returns。如果它只返回一行,那么这意味着在 Magento 的某个地方,某些东西可能正在修改你的 collection。

或者,您可以尝试使用此方法将 collection 限制为 1 个结果:

$td_trans_collection->getSelect()->limit(1);

您也可以试试:

$td_trans_collection->getFirstItem()->getData();

如果那个可靠returns你想要的结果,那么问题就解决了。

如果上述操作失败,请转到:lib/Varien/Db/Adapter/Pdo/Mysql.php 并找到以下属性并按如下所示进行更改:

protected $_debug               = true;
protected $_logAllQueries       = true;

将这些值设置为真后,运行 再次 collection。然后转到:var/debug/pdo_mysql.log 并仔细查看最终执行的查询。希望这能让您更好地了解正在发生的事情。

此外,删除 ->load();