2013-02-28 18 views
5

mam ten globalny config:jak uzyskać nazwę tabeli 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> 

w moim pliku mysql4-install-0.1.0.php, muszę uzyskać nazwę tabeli. Jak mam to zrobić? wiem, że jest coś takiego:

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

Ale to tylko wywołuje wyjątek Can't retrieve entity config: subscriber_resource/records. Co muszę zrobić, aby pobrać nazwę tabeli?

+0

Szczerze mówiąc zawsze znałem nazwę tablic, $ this-> getTable ("some/thing") po prostu dodaje pre i przyrostki. Więc tak naprawdę jeśli nazwiesz nazwę tabeli, to działa – Soundz

Odpowiedz

13

zorientowali się odpowiedź siebie, chociaż dzięki @Yaroslav za reżyserię Moje strony do samouczka Alan Storm, jako że pomogło.

Odpowiedź jest, muszę to:

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

gdzie „abonent” to nazwa wpisu konfiguracyjnego dla modelu (nie zasobu) i „dokumentacji” jest podmiotem. Okazuje się, że gdy magento parsuje thinga/thingb, zawsze zakłada, że ​​przed ukośnikiem jest model i dereferencje, aby uzyskać zasób, patrząc w konfiguracji dla <thinga><resourceModel>{resourcemodel}, a następnie ponownie szukając <{resourcemodel}><entities><thingb><table>, aby uzyskać nazwę tabeli.

Więc moja konfiguracja była poprawna, po prostu wpadłem w zakłopotanie pomiędzy pomysłem modelu i zasobu. Mam nadzieję, że pomoże to komuś utknąć w tym samym problemie - nie mogłem znaleźć żadnych wyraźnych informacji na ten temat w różnych samouczkach.

2

Na Magento współpracujesz z Collections. Zobacz przykład:

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

Sprawdź użyteczną stronę Alan Storm, szczególnie tutorial on Magento models.

EDIT

Aby uzyskać nazwy tabeli na setup zainstalować Oto szczegółowy próbki. Zwróć uwagę na $installer->getTable('records/subscriber_records') tutaj, gdzie jest załadowana nazwa tabeli.

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

Dla zasobów instalacyjnych sprawdzić ten drugi Alan Storm's tutorial

+2

Tak, ale to jest zbyt wysoki poziom - tutaj powiedziałem, że próbuję uzyskać nazwę tabeli w sql instalacji, to jest tak naprawdę gdzie będę tworzył tabelę, więc Nie mogę jeszcze użyć getModel. – Benubird

+0

Ouch! Masz rację. Zmieniono i dodano to, czego szukasz. Zachowanie drugiego kodu jako bonusu;) – Yaroslav

2

Jeśli chcesz uzyskać nazwę tabeli zasobu, dokłada nie mieć model zasobów (jak catalog/category_product) i jesteś nie w skrypcie konfiguracyjnym, można zrobić to w ten sposób:

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

Jest to przydatne dla wszystkich relacji N: M, w których zwykle nie jest wymagana klasa modelu.