我正在为Magento开发一个模块,该模块涉及提交每个订单的总价并将其存储在SQL表中。我的第一直觉是使用原始的SQL命令来做到这一点,但根据我迄今为止关于该主题阅读的大多数Magento文章,似乎我应该使用Magento / Zend类来代替这样做。
如何使用Magento类访问SQL数据库,这样做有什么好处,而不仅仅是使用原始SQL命令?
非常感谢所有帮助,我总是接受答案!
答案 0 :(得分:1)
关于“为什么ORM / ActiveRecord的使用优于原始SQL”的答案与“为什么我需要使用MVC或编程模式?”相同。这是一些哲学问题,因此您可以使用Google找到很多答案。
您必须创建业务和资源模型。您还需要使用模块etc文件夹中的config.xml文件以及每个模型类的_construct方法将资源模型分配给业务模型。
例如,您的商家类包含 My_Module_Model_Bussines 和资源类 My_Module_Model_Resource_Bussines 。这些类的最小实现(必须是)
第一个:
class My_Module_Model_Business extends Mage_Core_Model_Abstract
{
protected function _construct()
{
$this->_init('my_module/business');
}
}
<强>第二强>:
class My_Module_Model_Resource_Business extends Mage_Core_Model_Mysql4_Abstract
{
protected function _construct()
{
$this->_init('my_module/table', 'id');
}
}
其中每个类中方法_init的第一个参数是XML配置中的xpath,第二个(在资源类中)是主键名。
同样在config.xml中,您必须具有以下内容:
<?xml version="1.0"?>
<config>
<modules>
<My_Module>
<version>YOUR_VERSION_OF_MODULE(e.g. 0.0.1)</version>
</My_Module>
</modules>
<global>
<models>
<my_module>
<class>My_Module_Model</class>
<!-- name of the resource model node -->
<resourceModel>my_module_resource</resourceModel>
</my_module>
<my_module_resource>
<class>My_Module_Model_Resource</class>
<entities>
<table>
<table>your_table_name</table>
</table>
</entities>
</my_module_resource>
</models>
<!-- another config nodes -->
</global>
</config>
之后你可以使用这样的东西:
Mage::getModel('my_module/business')->setFirstField('some data')
->setTotal('100.1')
->setOrderId(10)
->save();
如果您使用较新版本的Magento而不是1.5.1,则需要将类名中的 Mysql4 更改为资源