【问题标题】:Collection addFieldToFilter does not filtering集合 addFieldToFilter 不过滤
【发布时间】:2015-05-12 02:29:29
【问题描述】:

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

【问题讨论】:

  • 如果你应该只得到一行,为什么不使用 getFirstItem() 而不是 load() 呢?你不必循环。

标签: php magento magento-1.9 magento-1.9.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();

【讨论】:

  • $td_trans_collection->getData() 在表中返回我想要的正确项目,但是它以数组而不是 Object 的格式返回。我现在知道我至少有 1 个备份解决方案。查询在数据库终端上正确运行,它只是返回我表中每个条目的集合。我会尝试使用$_debug$_logAllQueries 看看我是否能发现任何错误
  • ->getData() 总是以数组的形式返回。只需删除 getData() ,它将成为一个对象
  • @ThangPham 这个答案对你有用吗?如果是这样,请将其标记为已接受,以便我获得信用。迟到总比不到好。谢谢!
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    循环遍历集合的正确方法是

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

    【讨论】:

    • 请再次阅读我的问题,我有您在此处提供的确切循环。它显示整个表的记录。
    • 要获取特定行的值,例如increment_id,您可以使用$item->getIncrementId()。默认情况下,collection 会渲染表的所有记录。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-07
    • 2014-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多