2013-05-09 38 views
0

我有以下代码: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())); 

上述方法产生,在完全执行工作的SQL查询phpmyadmin并返回我期望的结果。

我再登录计数的$收件人

Mage::log("Loading recipients for queue: {$recipients->count()}"); 

这是代码结束的地方。实际上它甚至不会记录消息。如果我注释掉上面的日志代码,并尝试做一个

foreach ($recipients as $crm) 
{ 
    var_dump($crm); 
    die(); 
} 

它不会进入的foreach。解析器将在foreach之前停止。

最糟糕的是没有打印出错信息。我被严重卡住了。

谢谢

回答

1

无论是count()foreach操作触发采集实际load(),这意味着执行查询,结果集是牵强,并且每个结果被试图上的实例作为_data该集合的模型类。项目实现后,收集类尝试通过addItem()将其添加到其内部存储。

我怀疑你的集合显式抛出异常,因为结果集中有重复的主键;逻辑请参见Varien_Data_Collection::addItem()。暂时对此进行评论以进行测试。

要解决,请在您的集合类中本地更改您的查询或覆盖addItem()

+0

你先生,是个天才!非常感谢。 – Jason246 2013-05-10 13:49:58