2

私は、送信されたすべての注文の合計金額を取得してSQLテーブルに保存するMagentoのモジュールに取り組んでいます。私の最初の本能は、生のSQLコマンドを使用してこれを行うことですが、このトピックについてこれまで読んだMagentoの記事のほとんどによると、代わりにMagento/Zendクラスを使用することになっているようです。

Magentoクラスを使用してSQLデータベースにアクセスするにはどうすればよいですか?また、生のSQLコマンドを使用する代わりにアクセスすることの利点は何ですか?

すべての助けは大歓迎です、そして私はいつも答えを受け入れます!

4

1 に答える 1

1

「なぜORM/ActiveRecordの使用が生のSQLよりも優れているのか」という質問に対する答えは、「なぜMVCまたはプログラミングパターンを使用する必要があるのか​​」と同じです。それは少し哲学的な質問なので、Googleを使用してそれらに関する多くの答えを見つけることができます。

ビジネスモデルとリソースモデルを作成する必要があります。また、モジュールなどのフォルダーと各モデルのクラスの_constructメソッドでconfig.xmlファイルを使用して、リソースモデルをビジネスモデルに割り当てる必要があります。

たとえば、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');
    }
}

2番目

class My_Module_Model_Resource_Business extends Mage_Core_Model_Mysql4_Abstract
{
    protected function _construct()
    {
        $this->_init('my_module/table', 'id');
    }
}

ここで、各クラスのメソッド_initの最初のパラメーターはXML構成のxpathであり、2番目のパラメーター(リソースクラス内)は主キー名です。

また、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 に答える