集合addFieldToFilter不会过滤

时间:2015-05-12 02:29:29

标签: php magento magento-1.9 magento-1.9.1

我有一个非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();

返回

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

这是一个正确的查询,应该只返回1个答案。我也在终端上运行了这个查询。但是,当我循环遍历集合

 foreach($td_trans_collection as $item){
     echo $item;
 }

我收到了表格中的所有条目,为什么会这样?我正在使用Magento 1.9.1

3 个答案:

答案 0 :(得分:1)

不要调用load(),当你已经在集合对象中拥有它时,你将再次检索所有内容。该集合是一个关联数组,添加

答案 1 :(得分:1)

首先,测试直接在数据库中选择查询以查看它返回的内容。如果它只返回你想要的一行那么这意味着在Magento的某个地方,或许正在修改你的收藏。

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

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

您也可以尝试:

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

如果可靠地返回您想要的结果,那么问题就解决了。

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

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

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

此外,请删除->load();

答案 2 :(得分:0)

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

循环收集的正确方法是

{{1}}