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.前者以单例模块返回。上面配置文件第三行的
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