1

MagentoORMデータベースアクセスの構文を理解しようとしています。誰かがこのXML構成ファイルで使用されている部分を説明するのを手伝ってもらえますか?

    <models>
        <modulex>
            <class>MynameSpace_Modulex_Model</class>
            <resourceModel>modulex_mysql4</resourceModel>
        </modulex>   

        <modulex_mysql4>
            <class>MynameSpace_Modulex_Model_Mysql4</class>              
            <entities>
                <blogpost>
                    <table>my_blog_posts</table>
                </blogpost>
            </entities>                 
        </modulex_mysql4>        
    </models>    
  • モデル-データベースアクセスとビジネスロジックに関連するクラスを定義するために使用されるセクション

  • modulex-特定のモジュールの名前。このセクションに含まれるものは、modulexという名前のモジュールにのみ適用されます

  • resourceModel-ディレクトリを示すか、フォローするXMLエンティティを指しますか?データベースアクセスに固有ですか?

  • modulex_mysql4-上記で使用したresourceModelの定義?これをmodulexセクションに入れてみませんか?

  • class MynameSpace_Modulex_Model-このモジュール内のクラスの場所を指しますか?クラスのインスタンスを作成しますか?

  • エンティティ-モジュールでリソースモデルを定義します

  • blogpost-モデルの名前(MynameSpace / Modulex / Modelのファイルとクラスの両方)

  • my_blog_posts-SQLテーブルの名前。

4

2 に答える 2

3

モデルとリソースモデルには大きな違いがあります

  • モデル-ビジネスロジックを処理します(任意のMVCで)
  • リソースモデル-データベースの相互作用を処理します

あなたの例を説明する

  • Modulex-モデル名
  • MynameSpace_Modulex_Model-はい、モジュールのモデルディレクトリへのパスです。次のようなクエリを実行するときにのみインスタンス化されます。Mage::getModel('modulex / modulex')-> load(1); ただし、単にMage :: getModel('modulex / modulex');を使用する場合。Magentoは遅延読み込みを信じているため、インスタンス化されません。
  • Entities-このモジュールに使用されるテーブルを表します。また、モジュールの特定のエンティティのテーブル名を取得するためにも使用されます。(以下の例を参照)
  • blogpost-いいえ、モデル名ではありません。モデル名はModulexです。blogpostは、テーブルmy_blog_postsのエンティティテーブル名を参照します(以下の例を参照) my_blog_posts-はい、データベーステーブルの名前です
  • mysql4-コミュニティエディション1.6以降、mysql4は非推奨になり、代わりにリソースとして使用されるようになりました。リソースは、データベースと直接対話するために使用されます。

モデルとエンティティのテーブル名の使用例:

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

ここで、modulex =モデル、blogpost=エンティティテーブル名。どちらもデータベーステーブル名を取得するために使用されます。

于 2013-02-18T05:37:42.117 に答える
1

「コミュニティエディション1.6以降、mysql4は非推奨になり、代わりにリソースとして使用されるようになりました。リソースはデータベースと直接やり取りするために使用されます。」

変更を理解すれば、config.xmlは将来このようになるはずです...

...
<global>
  <models>
    <modulex>
      <class>Msc_Modulex_Model</class>
      <resourceModel>modulex_resource</resourceModel>
    </modulex>

<!--    <modulex_mysql4>                            -->
<!--        <class>MynameSpace_Modulex_Model_Mysql4</class>    -->
<!--        <entities>                                -->
<!--            <blogpost>                            -->
<!--                <table>my_blog_posts</table>    -->
<!--            </blogpost>                            -->
<!--        </entities>                             -->
<!--    </modulex_mysql4>                            -->

    <modulex_resource>
      <class>MynameSpace_Modulex_Model_Resource</class>
      <deprecatedNode>modulex_mysql4</deprecatedNode>
      <entities>
        <blogpost>
           <table>my_blog_posts</table>
        </blogpost>
      </entities>
    </modulex_resource>
  </models>
</global>
...

Blogpost.phpの対応する変更も

<?php
// in \app\code\local\Msc\Module5\Model\Mysql4\Blogpost.php
//class Msc_Modulex_Model_Mysql4_Blogpost extends Mage_Core_Model_Mysql4_Abstract{
class Msc_Modulex_Model_Resource_Db_Blogpost extends Mage_Core_Model_Resource_Db_Abstract{
    protected function _construct()
    {
        $this->_init('modulex/blogpost', 'my_blogpost_id');
    }   
}
于 2013-02-19T03:03:09.693 に答える