首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >马根托-那些资源模型是怎么回事?

问马根托-那些资源模型是怎么回事?
EN

Stack Overflow用户
提问于 2013-02-18 03:07:48
回答 2查看 709关注 0票数 1

我试图理解Magento数据库访问的语法。有人能帮助解释一下在这个XML配置文件中使用的片段吗?

代码语言:javascript
复制
    <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的模块。
  • resourceModel -指示目录或指向要遵循的XML实体?专门用于数据库访问?
  • modulex_mysql4 -上面使用的resourceModel定义?为什么不把这个放在modulex部分呢?
  • 类MynameSpace_Modulex_Model -指向本模块中类的位置?做这个类的实例?
  • 实体-在我的模块中定义资源模型
  • blogpost -模型的名称(MynameSpace/Modulex/ model中的文件和类)
  • my_blog_posts - sql表的名称。
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-18 05:37:42

模型和资源模型有很大的区别

  • 模型-处理业务逻辑(在任何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 =您的实体表名。两者都用于获取数据库表名。

票数 3
EN

Stack Overflow用户

发布于 2013-02-19 03:03:09

“从社区版本1.6开始,mysql4就不再受欢迎,取而代之的是资源。资源用于直接交互数据库。”

如果我理解这个变化,那么config.xml将来应该会更像这样.

代码语言:javascript
复制
...
<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中的相应变化

代码语言:javascript
复制
<?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');
    }   
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14928897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档