2

問題:

次のコードを実行すると、モデルの getCollection() がオブジェクトを返さずに false を返すという問題を追跡しています。

var_dump(Mage::getResourceModel('referrer/transaction_collection'));

奇妙なことに、デプロイされているサーバーではなく、ローカルでオブジェクトを返します。

私が試したこと:

  • コードは SVN を使用してデプロイされ、ローカルでもライブでも同じコードです。これは、大文字と小文字が区別される問題であることを示しています (Mac で開発されました) が、見つけることができませんでした。
  • すべてのキャッシュをクリアしました。
  • モジュールが正常にインストールされ、データベースにテーブルが表示されます。
  • var/log/system.log には何もありません
  • var/report にレポートが生成されていません
  • 所有権は正しいです。
  • 許可は大丈夫です。

これをデバッグする方法のアイデアが不足しています。見逃した Magento の落とし穴はありますか?

私のコード:

リファラー/etc/config.xml

<?xml version="1.0" encoding="UTF-8"?>
<config>
    <modules>
        <TBP_Referrer>
            <version>1.0</version>
        </TBP_Referrer>
    </modules>
    <global>
        <models>
            <referrer>
                <class>TBP_Referrer_Model</class>
                <resourceModel>referrer_mysql4</resourceModel>
            </referrer>
            <referrer_mysql4>
                <class>TBP_Referrer_Model_Mysql4</class>
                <entities>
                    <transaction><table>referrer_transactions</table></transaction>
                </entities>
            </referrer_mysql4>
        </models>
        <resources>
            <referrer_setup>
                <setup>
                    <module>TBP_Referrer</module>
                </setup>
                <connection>
                    <use>core_setup</use>
                </connection>
            </referrer_setup>
            <referrer_write>
                <connection>
                    <use>core_write</use>
                </connection>
            </referrer_write>
            <referrer_read>
                <connection>
                    <use>core_read</use>
                </connection>
            </referrer_read>
        </resources>
    </global>
</config>

リファラー/モデル/Transaction.php

class TBP_Referrer_Model_Transaction extends Mage_Core_Model_Abstract {

    protected function _construct() {
        $this->_init('referrer/transaction');
    }

}

リファラー/モデル/mysql4/Transaction.php

class TBP_Referrer_Model_Mysql4_Transaction extends Mage_Core_Model_Mysql4_Abstract {
    protected function _construct() {
        $this->_init('referrer/transaction', 'transaction_id');
    }
}

リファラー/モデル/mysql4/Transaction/Collection.php

class TBP_Referrer_Model_Mysql4_Transaction_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract {

    protected function _construct() {
        $this->_init('referrer/transaction');
    }

}

リファラー/sql/referrer_setup/install-1.0.php

$installer = $this;
$installer->startSetup();

$installer->run("
CREATE TABLE referrer_transactions(
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `referrer_id` int(11) DEFAULT NULL,
  `percentage` int(11) DEFAULT '0',
  `order_id` int(11) DEFAULT NULL,
  `amount` decimal(11,2) DEFAULT NULL,
  `timestamp` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `order_id` (`order_id`),
  KEY `referrer_id` (`referrer_id`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8;
");

$installer->endSetup();
4

2 に答える 2

1

それを見つけるのに時間がかかりました。間違った抽象クラスを使用していました。私は使用していました:

Mage_Core_Model_Mysql4_Collection_Abstract

以下に切り替えると解決しました:

Mage_Core_Model_Resource_Db_Collection_Abstract

于 2013-07-28T14:35:50.283 に答える
1

私の場合、/PROY/Test/Resource/Test/Colection.php でコレクション モデルを作成するのを忘れたため、NULL になっています。

<?php
class PROY_Test_Model_Resource_Test_Collection extends     Mage_Core_Model_Resource_Db_Collection_Abstract
 {
     public function _construct()
     {
         parent::_construct();
         $this->_init('test/test');
     }
}
于 2014-05-12T15:24:59.143 に答える