1

我正在尝试了解 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 - 指向这个模块中类的位置?创建类的实例?

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

  • 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 回答