现在的位置: 首页 > 综合 > 正文

Magento的database设计(转)

2014年02月09日 ⁄ 综合 ⁄ 共 2037字 ⁄ 字号 评论关闭

Magento的数据库设计是比较有争议的地方。它使用了EAV(Entity Attribute Value)的设计方式。这允许我们可以在产品,分类,订单等对象加上无限的属性,这使得magento的扩展很容易,但同时,它也增加了程序员在数据操作时难度。下面先了解magento与数据库的基本方式–resource.
Resource: 它的角色是负责管理Magento database 的connections.可以在全局配置文件etc/config.xml中定义。也可以在任何一个模块的config.xml里面定义。每个 resource下面可以定义多个connection。每个connection都有一个名字,大概格式是 module_read,module_write,module_setup。这样就允许我们可以定义不同的模块,使用不同的连接,也就是可以使用不同的数据库服务器。例如:

<resources>
    <default_setup>
        <connection>
            <host>localhost</host>
            <username></username>
            <password></password>
            <dbname>magento</dbname>
            <model>mysql4</model>
            <initStatements>SET NAMES utf8</initStatements>
            <type>pdo_mysql</type>
            <active>1</active>
        </connection>
    </default_setup>
</resources>

这些值将会传给 Zend_Db_Adapter_Abstract类,type的值只能是pdo_mysql和mysqli,这两个值在etc/config.xml里面有定义对应的类。
要获得一个connection,可以通过以下方法:
$write = Mage::getSingleton(‘core/resource’)->getConnection(‘core_write’);

所有的Magento models 都继承Mage_Core_Model_Abstract类,这个类帮助这些model通过 property-to-column的命名方法保存数据到database.Model通过自身的_getResource获得之前配置的 resource,这个resource是由init()通过resource名字初始化的,名字模式是module_name。

<global>
    <models>
        <wishlist>
            <class>Mage_Wishlist_Model</class>
            <resourceModel>wishlist_mysql4</resourceModel>
        </wishlist>
        <wishlist_mysql4>
            <class>Mage_Wishlist_Model_Mysql4</class>
            <entities>
                <wishlist>
                    <table>wishlist</table>
                 </wishlist>
                 <item>
                    <table>wishlist_item</table>
                 </item>
            </entities>
        </wishlist_mysql4>

下面讲一下主要的数据库操作。

Mage::getSingleton(‘wishlist/wishlist’),Mage::getModel(‘wishlist /wishlist’),
这两行代码将会返回模块wishlist的model.前者以单例模块返回。上面配置文件第三行的对应代码第一个wishlist. 以第四行配置为前缀,所以最终返回的model文件类是 Mage_Wishlist_Model_Wishlist,这个文件位于app/code/core/Mage/Wishlist/Model /Wishlist.php
Mage::getResourceSingleton(‘wishlist/wishlist’),Mage::getResourceModel(‘wishlist /wishlist’)
这两行代码则返回resource对应的model。以第八行的配置为前缀,返回的类是 Mage_Wishlist_Model_Mysql4_Wishlist,这个文件位于app/code/core/Mage/Wishlist /Model/Mysql4/Wishlist.php。
Mage::getResourceModel(‘wishlist/wishlist_collection’)
返回的类是Mage_Wishlist_Model_Mysql4_Wishlist_Collection,这个文件位于app/code/core /Mage /Wishlist/Model/Mysql4/Wishlist/Collection.php。

 

原文链接:http://www.it513.com/archives/146

 

抱歉!评论已关闭.