我有这个全局配置:
<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
。我需要做什么来检索表名?
答案 0 :(得分:14)
我自己想出了答案,尽管感谢@Yaroslav指导Alan Storm的教程,因为这有助于。
答案是,我需要这个:
$this->getTable('subscriber/records');
其中“subscriber”是模型(不是资源)的配置条目的名称,“records”是实体。事实证明,当magento解析thinga / thingb时,它总是假设斜杠之前的东西是模型并通过查看<thinga><resourceModel>{resourcemodel}
的配置来取消引用资源,然后再查找{{1}获取表名。
所以我的配置是正确的,我只是在模型和资源的想法之间混淆。希望这有助于其他人陷入同样的问题 - 我在各种教程中找不到任何明确的信息。
答案 1 :(得分:3)
在Magento上,您使用Collections
。查看样本:
$mysubscriber_recordsCollection = Mage::getModel('records/subscriber_records')->getCollection()
检查有用的Alan Storm网站,特别是tutorial on Magento models。
编辑
要在安装程序安装中获取表名,请参阅详细示例。请注意这里加载表名的$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's tutorial
答案 2 :(得分:3)
如果您想获取不的资源的表名称具有资源模型(例如catalog/category_product
),并且您在设置中不脚本,你可以这样做:
$table = Mage::getSingleton('core/resource')->getTableName('catalog/category_product');
这对于您通常不需要模型类的所有N:M关系都很有用。