7

私はこのグローバル設定を持っています:

<global>
    <models>
    <subscriber>
        <class>Giftlab_Subscriber_Model</class>
        <resourceModel>subscriber_resource</resourceModel>
    </subscriber>
    <subscriber_resource>
        <class>Giftlab_Subscriber_Model_Resource</class>
        <entities>
            <records>
                <table>subscriber_records</table>
            </records>
        </entities>
    </subscriber_resource>
    </models>
    <resources>
        <giftlab_subscriber_write>
            <connection>
                <use>core_write</use>
            </connection>
        </giftlab_subscriber_write>
        <giftlab_subscriber_read>
            <connection>
                <use>core_read</use>
            </connection>
        </giftlab_subscriber_read>
        <giftlab_subscriber_setup>
            <setup>
                <module>Giftlab_Subscriber</module>
                <class>Giftlab_Subscriber_Model_Resource_Setup</class>
            </setup>
            <connection>
                <use>core_setup</use>
            </connection>
        </giftlab_subscriber_setup>
    </resources>
</global>

私の mysql4-install-0.1.0.php ファイルでは、テーブル名を取得する必要があります。どうすればいいのですか?私はそれが次のようなものであることを知っています:

$this->getTable('subscriber_resource/records')

しかし、それは例外を生成するだけCan't retrieve entity config: subscriber_resource/recordsです。テーブル名を取得するにはどうすればよいですか?

4

3 に答える 3

16

自分で答えを見つけましたが、@YaroslavがAlanStormのチュートリアルに案内してくれたことに感謝します。

答えは、私はこれが必要です:

$this->getTable('subscriber/records');

ここで、「subscriber」はモデルの構成エントリの名前(リソースではない)であり、「records」はエンティティです。magentoがthinga/thingsbを解析するとき、スラッシュの前のthingaがモデルであると常に想定し、の構成を調べてからテーブル名を取得する<thinga><resourceModel>{resourcemodel}ために再度検索することにより、リソースを取得するためにそれを逆参照します。<{resourcemodel}><entities><thingb><table>

だから私の設定は正しかった、私はモデルとリソースのアイデアの間で混乱していました。これが他の誰かが同じ問題で立ち往生するのに役立つことを願っています-私はさまざまなチュートリアルでこれに関する明確な情報を見つけることができませんでした。

于 2013-02-28T14:56:50.207 に答える
5

リソース モデルを持たないcatalog/category_productリソース ( など)のテーブル名を取得する必要があり、セットアップ スクリプトを使用していない場合は、次のように実行できます。

$table = Mage::getSingleton('core/resource')->getTableName('catalog/category_product');

これは、通常はモデル クラスを必要としないすべての N:M 関係に役立ちます。

于 2016-03-29T13:01:21.950 に答える
3

Magento では、Collections. サンプルを見る:

$mysubscriber_recordsCollection = Mage::getModel('records/subscriber_records')->getCollection()

便利な Alan Storm サイト、特にMagento モデルのチュートリアルを確認してください。

編集

セットアップ インストールでテーブル名を取得するには、ここに詳細なサンプルを示します。$installer->getTable('records/subscriber_records')テーブル名が読み込まれる場所に注意してください。

<?php
    echo 'Running This Upgrade: '.get_class($this)."\n <br /> \n";
    $installer = $this;
    $installer->startSetup();
    $installer->run("
        CREATE TABLE `{$installer->getTable('records/subscriber_records')}` (
            `subscriber_records_id` int NOT NULL AUTO_INCREMENT,
            PRIMARY KEY (`subscriber_records_id`)
            ) ENGINE=InnoDB DEFAULT CHARSET=utf8
    ");
    $installer->endSetup();

セットアップ リソースについては、この他のAlan Storm のチュートリアルを確認してください

于 2013-02-28T14:37:01.563 に答える