我有一个非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
答案 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}}