2013-02-28 30 views
5

我有這樣的全局配置:在我mysql4安裝-0.1.0.php文件如何讓Magento的表名

<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> 

,我需要的表名。我該怎麼做? 我知道它是這樣的:

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

但是,只有產生異常Can't retrieve entity config: subscriber_resource/records。我需要做什麼來檢索表名?

+0

說實話,我總是知道表名,$ this-> getTable('some/thing')只是添加了前綴和後綴。所以實際上,如果你屁股的名稱表工作 – Soundz 2013-02-28 14:36:05

回答

13

想通了自己的答案,但由於@Yaroslav指導我的阿蘭風暴的教程,因爲這幫助。

答案是,我需要這樣的:

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

其中「用戶」是模型(而不是資源),以及「記錄」的配置條目的名稱是實體。原來,當magento解析thinga/thingb時,它始終假設斜線前的東西是模型並取消資源獲取,通過查找<thinga><resourceModel>{resourcemodel}的配置,然後再次查找<{resourcemodel}><entities><thingb><table>以獲取表名。

所以我的配置是正確的,我只是模型和資源的思想混淆。希望這可以幫助別人解決同樣的問題 - 在各種教程中我找不到任何明確的信息。

2

在Magento上,您使用Collections。查看示例:

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

檢查有用艾倫風暴的網站,特別是tutorial on Magento models

編輯

要獲得關於設置表名安裝在這裏是一個詳細的樣本。請注意0​​這裏是載入表名的地方。

<?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

是的,但這是太高的水平 - 在這裏我說我想要在安裝sql中獲取表名,這實際上是我將創建表的位置,所以我還不能使用getModel。 – Benubird 2013-02-28 14:40:31

+0

哎唷!你是對的。編輯並添加了您要查找的內容。保持其他代碼只是一種獎勵;) – Yaroslav 2013-02-28 14:45:29

2

如果你想要得到什麼有一個資源模型的資源的表名(如catalog/category_product),你在安裝腳本,你可以這樣來做:

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

這對您通常不需要模型類的所有N:M關係都有幫助。