Magento - 这些资源模型是什么?

时间:2013-02-18 03:07:48

标签: magento model

我正在尝试理解Magento ORM数据库访问的语法。 有人可以帮助解释这个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>    
  • models - 用于定义与数据库访问相关的类的部分&amp;业务逻辑

  • modulex - 特定模块的名称;本节中包含的内容仅适用于名为modulex

  • 的模块
  • resourceModel - 表示要跟随的XML实体的目录或指向?特定于数据库访问?

  • modulex_mysql4 - 上面使用的resourceModel的定义?为什么不把它放在modulex部分?

  • class MynameSpace_Modulex_Model - 指向此模块中类的位置?制作类的实例?

  • 实体 - 在我的模块中定义资源模型

  • blogpost - 模型名称(MynameSpace / Modulex / Model中的文件和类)

  • my_blog_posts - sql表的名称。

2 个答案:

答案 0 :(得分:3)

模型和资源模型之间存在很大差异

  • 模型 - 处理业务逻辑(在任何MVC中)
  • 资源模型 - 处理数据库交互

解释你的例子

  • Modulex - 型号名称
  • MynameSpace_Modulex_Model - 是,指向模块模型目录的路径。它仅在触发查询时被实例化,例如:Mage :: getModel('modulex / modulex') - &gt; load(1);但是如果你只是使用Mage :: getModel('modulex / modulex');它不会实例化,因为Magento相信Lazy Loading。
  • Entities - 表示将用于此模块的表。它还用于获取模块的特定实体的表名。 (见下面的例子)
  • blogpost - 不,这不是您的型号名称。您的型号名称为Modulex。 blogpost引用表my_blog_posts的实体表名称(参见下面的示例) my_blog_posts - 是的,它是数据库表的名称
  • mysql4 - 从社区版1.6开始,不推荐使用mysql4,现在将其用作资源。资源用于直接交互数据库。

模型和实体表名称的使用示例:

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

此处,modulex =您的模型,blogpost =您的实体表名称。两者都用于获取数据库表名。

答案 1 :(得分: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');
    }   
}