Magento资源模型无法正常工作

时间:2013-05-09 15:49:38

标签: magento

我有以下代码:

$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之前停止。

最糟糕的是没有打印错误消息。我被严重困住了。

谢谢

1 个答案:

答案 0 :(得分:1)

count()foreach操作都会触发集合到实际load(),这意味着执行查询,获取结果集,并尝试将每个结果设置为_data在集合的模型类的实例上。实现项目后,集合类会尝试通过addItem()将其添加到其内部存储。

我怀疑您的集合明确抛出异常,因为结果集中存在重复的主键;请参阅Varien_Data_Collection::addItem()了解逻辑。暂时评论这个以进行测试。

要解决此问题,请在集合类中更改查询或覆盖addItem()