2012-06-22 143 views
2

我正在为Magento模块工作,它涉及到每个提交的订单的总价格并将其存储在SQL表中。我的第一本能是使用原始的SQL命令来做到这一点,但根据我迄今为止关于该主题阅读的大多数Magento文章,似乎我应该使用Magento/Zend类来完成此操作。Magento访问SQL数据库

如何使用Magento类访问SQL数据库,以及使用原始SQL命令而不使用原始SQL命令的优点是什么?

所有帮助非常感谢,我始终接受一个答案!

回答

1

问题“为什么ORM/ActiveRecord的使用比原始SQL更好”与“为什么我需要使用MVC或编程模式?”相同。这有点哲学问题,所以你可以用Google找到很多答案。

您必须创建业务和资源模型。此外,您需要使用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文件中必须有这样的事情:如果你使用的Magento的新版本1.5.1相比

Mage::getModel('my_module/business')->setFirstField('some data') 
    ->setTotal('100.1') 
    ->setOrderId(10) 
    ->save(); 

<?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> 

之后,你可以使用这样的事情您需要将类名中的Mysql4更改为资源