2

我正在为 Magento 开发一个模块,该模块涉及获取每个提交的订单的总价格并将其存储在 SQL 表中。我的第一直觉是使用原始 SQL 命令来执行此操作,但根据我迄今为止阅读的有关该主题的大多数 Magento 文章,似乎我应该使用 Magento/Zend 类来执行此操作。

我将如何使用 Magento 类访问 SQL 数据库,这样做有什么好处而不是仅使用原始 SQL 命令?

非常感谢所有帮助,我总是接受答案!

4

1 回答 1

1

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

您必须创建业务和资源模型。此外,您还需要使用模块 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();

如果您使用比 1.5.1 更新的 Magento 版本,则需要将类名中的Mysql4更改为Resource

于 2012-06-22T17:57:28.747 回答