我有以下代码:
$recipients = Mage::getResourceModel('crm/crm_collection');
$recipients->getSelect()
->joinInner(array(
'link' => $recipients->getTable('crm/bulkMailLink'),
), "link.crm_id = e.entity_id", array(
'link_id' => 'link.id',
))
->where("link.queue_id = ? AND link.sent_at IS NULL", $queue->getId());
$recipients->addAttributeToSelect('title');
$recipients->addAttributeToSelect('first_name');
$recipients->addAttributeToSelect('chinese_name');
$recipients->addAttributeToSelect('last_name');
$recipients->addAttributeToSelect('email1');
$recipients->addAttributeToFilter('email1', array('neq'=>''));
$recipients->setPageSize(100);
$recipients->setCurPage(1);
然后我记录代码生成的select语句:
Mage::log("DEBUG: ".((string)$recipients->getSelect()));
以上产生了一个在phpmyadmin中完美执行的工作sql查询,并返回我期望的结果。
然后我记录了$ recipients的数量
Mage::log("Loading recipients for queue: {$recipients->count()}");
这就是代码停止的地方。实际上它甚至不会记录消息。如果我注释掉上面的日志代码并尝试执行
foreach ($recipients as $crm)
{
var_dump($crm);
die();
}
它不会进入foreach。解析器将在foreach之前停止。
最糟糕的是没有打印错误消息。我被严重困住了。
谢谢
答案 0 :(得分:1)
count()
和foreach
操作都会触发集合到实际load()
,这意味着执行查询,获取结果集,并尝试将每个结果设置为_data
在集合的模型类的实例上。实现项目后,集合类会尝试通过addItem()
将其添加到其内部存储。
我怀疑您的集合明确抛出异常,因为结果集中存在重复的主键;请参阅Varien_Data_Collection::addItem()
了解逻辑。暂时评论这个以进行测试。
要解决此问题,请在集合类中更改查询或覆盖addItem()
。