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 指导我阅读 Alan Storm 的教程,因为这有所帮助。

答案是,我需要这个:

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

其中“subscriber”是模型(不是资源)的配置条目的名称,“records”是实体。事实证明,当 magento 解析thinga/thingb 时,它总是假定斜杠之前的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');

This is helpful for all N:M relations where you usually does not need a model class.

于 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 回答