2013-02-28 28 views
5

tôi có cấu hình toàn cầu này:làm thế nào để có được bảng Magento tên

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

trong tập tin MySQL4-cài đặt-0.1.0.php của tôi, tôi cần phải nhận được tên bảng. Tôi phải làm nó như thế nào? Tôi biết nó là một cái gì đó như thế này:

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

Nhưng điều đó chỉ tạo ra một ngoại lệ Can't retrieve entity config: subscriber_resource/records. Tôi cần làm gì để lấy tên bảng?

+0

Thành thật mà nói, tôi luôn biết tablename, $ this-> getTable ('some/thing') chỉ thêm tiền tố và hậu tố. Vì vậy, thực sự nếu bạn ass tên của bảng nó hoạt động – Soundz

Trả lời

13

đặn ra câu trả lời bản thân mình, mặc dù nhờ @Yaroslav chỉ đạo của tôi để hướng dẫn Alan Storm, vì điều đó giúp đỡ.

Câu trả lời là, tôi cần điều này:

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

nơi "thuê bao" là tên của các mục cấu hình cho mô hình (không phải là tài nguyên), và "hồ sơ" là thực thể. Hóa ra rằng khi magento phân tích thinga/thingb, nó luôn luôn giả định rằng thinga trước dấu gạch chéo là mô hình và các tham số để lấy tài nguyên, bằng cách tìm trong cấu hình cho <thinga><resourceModel>{resourcemodel}, và sau đó tìm lại <{resourcemodel}><entities><thingb><table> để lấy tên bảng.

Vì vậy, cấu hình của tôi là chính xác, tôi chỉ bị lẫn lộn giữa ý tưởng về mô hình và tài nguyên. Hy vọng điều này sẽ giúp người khác bị mắc kẹt trên cùng một vấn đề - tôi không thể tìm thấy bất kỳ thông tin rõ ràng về điều này trong các hướng dẫn khác nhau.

2

Trên Magento bạn làm việc với Collections. Xem mẫu:

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

Kiểm tra trang web Alan Storm hữu ích, đặc biệt là tutorial on Magento models.

EDIT

Để có được tên bảng trên các thiết lập cài đặt ở đây là một mẫu chi tiết. Chú ý đến số $installer->getTable('records/subscriber_records') ở đây là nơi tên bảng được tải.

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

Đối với các nguồn lực thiết lập kiểm tra này khác Alan Storm's tutorial

+2

Có, nhưng đó là quá cao cấp - ở đây tôi nói tôi đang cố gắng để có được tên bảng trong sql cài đặt, đây thực sự là nơi tôi sẽ tạo bảng, vì vậy Tôi chưa thể sử dụng getModel. – Benubird

+0

Ouch! Bạn đúng. Đã chỉnh sửa và thêm những gì bạn đang tìm kiếm. Giữ mã khác chỉ là tiền thưởng;) – Yaroslav

2

Nếu bạn muốn nhận được các tên bảng của một tài nguyên mà không không có một mô hình tài nguyên (như catalog/category_product) và bạn đang không trong một kịch bản cài đặt, bạn có thể làm theo cách này:

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

Điều này hữu ích cho tất cả các mối quan hệ N: M, nơi bạn thường không cần lớp mô hình.

Các vấn đề liên quan