2015-05-12 52 views
0

我有一个非EAV模型,我想它收集过滤器像下面收集addFieldToFilter不过滤

$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

为什么不使用getFirstItem()代替负载()如果你应该只有一排?你不必循环。 – adrien54

回答

1

首先,测试直接在数据库中选择查询以查看它返回的内容。如果它只返回一行,那么这意味着在Magento的某个地方,可能有一些东西在修改你的集合。

或者,你可以试试这个方法到您的收藏限制为1个结果:

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

你还可以尝试:

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

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

如果上述失败,请访问:LIB /瓦瑞恩/ DB /适配器/ PDO/Mysql.php并找到以下属性并更改它们,如下图所示:

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

在设置这些值真的,再次运行你的收藏。然后转到:var/debug/pdo_mysql.log并仔细查看已执行的最终查询。希望这会给你一个更好的线索,知道发生了什么。

此外,除去->load();

+0

'$ td_trans_collection-> getData()'返回我想要的表中正确的项目,但是,它以数组格式而不是Object返回。我现在知道我至少有1个备份解决方案。查询在数据库终端上正确运行,它只是返回我表中每个条目的集合。我将尝试使用'$ _debug'和'$ _logAllQueries'来查看是否可以发现任何错误 –

+0

- > getData()总是以数组的形式返回。只要删除getData(),它将是一个对象 –

+0

@ThangPham这个答案适合你吗?如果是这样,请将其标记为已接受,以便我可以获得信用。迟到总比不到好。谢谢! –

0

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

正确的方法是通过采集环是

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

请再次阅读我的问题,我有你在这里提供的确切的循环。它显示整个表格的记录。 –

+0

以获得例如increment_id的特定行的值,您可以使用$ item-> getIncrementId()。默认情况下,集合呈现表的所有记录。 –

1

不要叫负载(),你会再次检索一切,当你已经有一个在收集对象。该集合是一个关联数组,添加