2012-03-28 8 views
1

Magento用のカスタム管理モジュールで作業していて、Magentoのアプローチを同時に学習しようとしています。現在バージョンCE 1.6のImです。Magentoのコレクションオブジェクトを使用するには

私はいくつかのチュートリアルと記事を読んで、カスタムdbテーブルを設定することができました。私はmakeコレクションクラスを管理すると思います。 (私はImをZend Framework/Magentoと初心者の熟練プログラマーに新しいと言うべきです)。少なくとも、次のコードは、私に正しい結果を得ることです:

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

私は私が私のDBからのフィルタリング行と列を取得$department_collection->getData()でこれをするときのvar_dump。今

、私はこれを行うにしてみてください。

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

私はMagentoのから例外を取得:

-warning:function.include [(メイジ\ Upperfield \モデル\ Systemconfig.php)が含ま]:ストリームを開くことに失敗しました:D:\ wamp \ www \ magento \ lib \ Varien \ Autoload.phpの93行目のファイルまたはディレクトリがありません

問題は、それが何であるか分かりません。そして、トレースはそれが連結され、関連性のある情報のみを表示するのであまり役に立ちません。

私のディレクトリ構造は次のようになります。

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

私は私のモデルをロードした:

<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> 
:私のconfig.xmlには、この(抜粋)のように、現在に見える

//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'); 
    } 
} 

私の推測は次のいずれかです: コレクションクラスを間違った構造で設定しました。または コレクションオブジェクトの使用方法を誤解しています。

ここに何が起こっているのか説明できますか?助けを求めるには Gratefull。同一である必要があります -

敬具 ADDE

+0

ポスト後のご質問を読ん際に申し訳ありませんが、私はちょうど私がコレクションモデルの名前空間の代わりに、モジュールの別名でのinitを設定し実現。問題が解決しました。私はあなたが同じコードを見て一晩中過ごす方法を愛し、そのような明白なエラーを認識しません。 –

+0

このチュートリアルを見つけましたか:http://alanstorm.com/magento_models_orm – Max

+0

ありがとう、ありがとうございます。私はmagentocommerce.comの記事とAlan Stormsの記事をチェックしています。それは私がこの点に着手することです。私がerlierのコメントで言ったように、それは「typo」エラーのようなものでした。... init( 'module/model')の代わりに..._ init( 'namespace/model')を使ってCollectionモデルを開始しようとしました。私は自分の質問に8時間以内に答えることができません。コメントしてくれてありがとう、そしてAlanへの賞賛。 –

答えて

2

は、あなたが得たエラーは、不適切なXML定義やクラスの命名/ファイル構造からでした。 Autoloaderがあなたのconfig.xmlを読み込んで、あなたがそれをconfig.xml内のどこに伝えたかを調べると、探していたファイルが見つかりませんでした。

コレクションとその親のモデルにはほとんどの情報は、それは場合に役立ちます:あなたは、コレクションを直接操作している場合

、あなたが使用する必要があります。

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

あなたがモデルで作業している場合は、そのコレクションのデータを取得し、データを変更します(例えば、データの合計、追加データの追加、削除など)。)あなたがそうのようなモデルを呼び出す必要があります:あなたはカスタムテーブルを持っている場合、いずれかの方法

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

を、あなたのconfig.xmlに、あなたはそれが動作するはず)(あなたは、リソース・モデルを使用し、どのテーブルされていることを定義する必要がありますと。既定のMagentoテーブルとやりとりするために、新しいコレクションを作成する必要はありません。すでに呼び出すことができるコレクションや、拡張することができます(オブザーバを使用することをお勧めします)。ここで

は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

偉大な答えをありがとう!あなたは多くの時間を節約します;) –

関連する問題