2012-03-28 79 views
1

我正在爲magento定製管理模塊,並試圖在同一時間學習magento方法=)。我目前在版本CE 1.6上。如何使用Magento的集合對象

我跟着幾個教程和文章,並設法設置一個自定義數據庫表,我想我管理的集合類工作。 (我應該說我是Zend Framework/Magento的新成員,也是初學者熟練的程序員)。至少下面的代碼獲得是我正確的結果:

$department_collection = Mage::getModel('custom/systemconfig')->getCollection() 
          ->addFilter('name','departments'); 

當我的var_dump這與$department_collection->getData()我得到一個數組從我的數據庫中篩選行。

現在,當我嘗試這樣做:

foreach ($department_collection as $department) { 
     $department->delete(); 
    } 

我從Magento的異常:

- 警告:包括(法師\ Upperfield \型號\ Systemconfig.php)function.include ]:未能打開流:沒有這樣的文件或目錄在D:\ wamp \ www \ magento \ lib \ Varien \ Autoload.php在線93

問題是,我想我設置我的目錄結構錯誤,但只是不明白它是什麼。跟蹤沒有太大的幫助,因爲它是連接的,只顯示相關信息。

我的目錄結構是這樣的:

+app 
    +code 
    +local 
     +Namespace 
     +Module 
      +Model 
      +Mysql4 
       +Systemconfig 
        Collection.php 
       Systemconfig.php 
      Systemconfig.php 

我裝我的模型有:

//file: ../Mysql4/Systemconfig.php 
class Namespace_Module_Model_Mysql4_Systemconfig extends Mage_Core_Model_Mysql4_Abstract{ 
    protected function _construct() 
    { 
     $this->_init('module/systemconfig', 'systemconfig_id'); 
    } 
} 



// file: ../Mysql4/Systemconfig/Collection.php 
class Namespace_Module_Model_Mysql4_Systemconfig_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract { 
    protected function _construct() 
    { 
     $this->_init('namespace/systemconfig'); 
    } 
} 

目前我的config.xml文件看起來像這樣(節選):

<models> 
    <module> 
     <class>Namespace_Module_Model</class> 
    <resourceModel>module_mysql4</resourceModel> 
</module> 

<module_mysql4> 
    <class>Namespace_Module_Model_Mysql4</class> 
    <entities> 
     <systemconfig> 
      <table>module_systemconfig</table> 
     </systemconfig> 
    </entities> 
</module_mysql4> 

我的猜測是: 我設置錯誤結構的集合類,或 我誤解如何使用集合對象。

有沒有人可以向我解釋這裏發生了什麼? Gratefull任何幫助。

問候 阿迪

+0

對不起,通過崗位後的問題閱讀時我才意識到我設置了命名空間,而不是在收集模型模塊別名初始化。問題解決了。我只是喜歡你花了整整一夜看着相同的代碼,並沒有意識到這樣的明顯錯誤。 – 2012-03-28 11:33:01

+0

你有沒有發現本教程:http://alanstorm.com/magento_models_orm – Max 2012-03-28 12:17:58

+0

是的,非常感謝。我一直在檢查magentocommerce.com上的Alan Storms文章。這就是我到現在爲止的女僕。正如我在評論中所說的那樣,這是一種「錯字」錯誤,我試圖用..._init('namespace/model')啓動Collection模型而不是..._init('module/model') ,在帖子後意識到這一點,但我無法在8小時內回答自己的問題。感謝Alan的評論和讚譽。 – 2012-03-28 12:50:24

回答

2

你得到的錯誤是從不正當的XML定義或類命名/文件結構 - 這應該是相同的。當Autoloader讀取你的config.xml文件,並在你的config.xml文件中找到它時,它沒有找到它正在查找的文件。

上收藏和他們的父母模型提供一些信息,如果它可以幫助:

如果你是直接與收集工作,你應該使用:

$_collection = Mage::getResourceModel('namespace/model_collection'); 

如果您使用的是型號的工作那獲取一個集合的數據,並修改數據(例如,總結事情,增加額外的數據,刪除事物等。),你應該調用模型像這樣:

$_collection = Mage::getModel('namespace/model')->getCollection(); 

無論哪種方式,在你的config.xml中,您需要定義您正在使用的資源模型和表(如果有自定義表)應該工作用。你不需要編寫一個新的集合來與默認的Magento表進行交互,因爲已經有可以調用或擴展的集合(不推薦,你應該使用Observers)。

以下是config.xml中正確收集定義的例子:

<models> 
    <modulename> 
     <resourceModel>modulename_mysql4</resourceModel> 
    </modulename> 
    <modulename_mysql4> 
     <class>Namespace_ModuleName_Model_Mysql4</class> 
     <entities> 
      <modulename> 
       <table>modulename_custom</table> 
      </modulename> 
     </entities> 
    </modulename_mysql4> 
</models> 
<resources> 
    <modulename_setup> 
     <setup> 
      <module>Namespace_ModuleName</module> 
     </setup> 
     <connection> 
      <use>core_setup</use> 
     </connection> 
    </modulename_setup> 
    <modulename_write> 
     <connection> 
      <use>core_write</use> 
     </connection> 
    </modulename_write> 
    <modulename_read> 
     <connection> 
      <use>core_read</use> 
     </connection> 
    </modulename_read> 
</resources> 

在這個文件中,我寫了聯定義和節點都必須是這樣寫的,你不能已一個回報,它必須是同一條線。這是Magento自動加載器如何工作的一個小缺點。

希望這會有所幫助!

+0

感謝您的好評!你可以節省很多時間;) – 2014-12-17 23:41:15