我正在尝试理解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表的名称。
答案 0 :(得分:3)
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');
}
}