【问题标题】:Magento - what's with those resource models?Magento - 这些资源模型是什么?
【发布时间】:2013-02-18 03:07:48
【问题描述】:

我正在尝试了解 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>    
  • 模型 - 用于定义与数据库访问和业务逻辑相关的类的部分

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

  • resourceModel - 指示要遵循的目录或指向 XML 实体?特定于数据库访问?

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

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

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

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

  • my_blog_posts - sql 表的名称。

【问题讨论】:

    标签: magento model


    【解决方案1】:

    Model和Resource模型有很大区别

    • 模型 - 处理业务逻辑(在任何 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 已被弃用,现在用作资源。资源用于直接与数据库交互。

    Model和Entity表名使用示例:

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

    这里,modulex = 你的模型,blogpost = 你的实体表名。两者都用于获取数据库表名。

    【讨论】:

    【解决方案2】:

    “从社区版本 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');
        }   
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-22
      • 2013-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-19
      • 2011-06-17
      相关资源
      最近更新 更多