2013-02-28 22 views
5

ho questa configurazione globale:come ottenere il nome della tabella 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> 

nel mio file MySQL4-install-0.1.0.php, ho bisogno di ottenere il nome della tabella. Come lo faccio? So che è qualcosa di simile:

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

Ma che produce solo un'eccezione Can't retrieve entity config: subscriber_resource/records. Cosa devo fare per recuperare il nome della tabella?

+0

Per essere onesti, ho sempre saputo che il tablename, $ this-> getTable ('some/thing') aggiunge solo pre e suffissi. Quindi in realtà se assumi il nome del tavolo funziona – Soundz

risposta

13

Capito la risposta me stesso, anche se grazie a @Yaroslav per dirigere mia per un'esercitazione di Alan Tempesta, come che ci ha aiutato.

La risposta è, ho bisogno di questo:

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

dove "abbonato" è il nome della voce di configurazione per il modello (non la risorsa), e "record" è l'entità. Risulta che quando magento analizza thinga/thingb, assume sempre che thinga prima della barra sia il modello e le dereferenze che per ottenere la risorsa, guardando nella configurazione per <thinga><resourceModel>{resourcemodel}, e quindi cercando di nuovo <{resourcemodel}><entities><thingb><table> per ottenere il nome della tabella.

Quindi la mia configurazione era corretta, mi stavo solo confondendo tra l'idea di modello e risorsa. Spero che questo aiuti qualcun altro a rimanere bloccato sullo stesso problema - non ho trovato alcuna informazione chiara su questo nei vari tutorial.

2

Su Magento si lavora con Collections. Vedere un esempio:

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

controllare sito utile Alan Tempesta, specialmente il tutorial on Magento models.

EDIT

Per ottenere i nomi di tabella sulla configurazione installazione Ecco un esempio dettagliata. Prestare attenzione allo $installer->getTable('records/subscriber_records') qui è dove viene caricato il nome della tabella.

<?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(); 

Per le risorse di configurazione controllare questo altro Alan Storm's tutorial

+2

Sì, ma è troppo alto - qui ho detto che sto cercando di ottenere il nome della tabella nell'installazione sql, questo è in realtà dove creerò la tabella, quindi Non riesco ancora a utilizzare getModel. – Benubird

+0

Ouch! Hai ragione. Modificato e aggiunto quello che stai cercando. Mantenere l'altro codice solo come bonus;) – Yaroslav

2

Se si desidera ottenere il nome della tabella di una risorsa che fa non hanno un modello di risorse (come catalog/category_product) e siete non in uno script di installazione, si può fare in questo modo:

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

Questo è utile per tutte le relazioni N: M in cui di solito non è necessaria una classe del modello.

Problemi correlati