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