管理セクションから注文が行われた後、イベント オブザーバーがログを作成しています。これをログ ファイルではなくデータベースに挿入するにはどうすればよいですか? 誰でも良いチュートリアルを提供できますか。
1 に答える
まず、config.xml に setup/read/write セクションを追加する必要があります。モジュールがテスト/デモであるとしましょう。セットアップ セクションは次のようになります。
<models>
<demo>
<class>Test_demo_Model</class>
<resourceModel>Demo_mysql4</resourceModel>
</demo>
<demo_mysql4>
<class>Test_Demo_Model_Mysql4</class>
<entities>
<demo>
<table>test_demo</table>
</demo>
</entities>
</demo_mysql4>
</models>
<resources>
<demo_setup>
<setup>
<module>Test_demo</module>
<class>Test_Demo_Model_Resource_Mysql4_Setup</class>
</setup>
<connection>
<use>core_setup</use>
</connection>
</demo_setup>
<demo_write>
<connection>
<use>core_write</use>
</connection>
</demo_write>
<demo_read>
<connection>
<use>core_read</use>
</connection>
</demo_read>
</resources>
この時点で、magento がモデルをロードするためにモデルを初期化する必要があります。'demo/ _ ' は、モジュール全体で同じものを維持する限り、'demo/whateveryouwant' にすることができます。「id」は、magento がこのモデルに使用する主キーと識別子です。
//Test/Demo/Model/Mysql4/Comment.php
class Test_Demo_Model_Mysql4_Comment extends Mage_Core_Model_Mysql4_Abstract
{
protected function _construct()
{
$this->init('demo/________', 'id');
{
}
ここから、データベース インストール スクリプトを作成する必要があります。これは、ファイル Test/Demo/sql/demo_setup/mysql4-install-0.1.0.php を作成するだけで実行できます。ここで、0.1.0 は構成ファイルで使用されるバージョン番号です。次のようになります。
$installer = $this;
$installer->startSetup()
$installer->run("
#your create table goes here
");
$installer->endSetup();
これが行うことは、テーブルを作成することです。使用できます
CREATE TABLE {$installer ->getTable('demo/_____') as defined in your configuration file to create the table name used in the file. This will also create an entry in the table core_resource that will specify the name and version number. In order to make a modification to the table you'll need to delete the original table as well as it's entry in core_resource. At this point you'll want to create a model to manage the data. Here's an example of that for a table that looks like:
//comment -String
//poster -String
//Id -int autoincrement
public function addComment($comment, $poster)
{
$comment = Mage::getModel('Demo/______');
$comment->setComment($comment);
$comment->setPoster($poster);
$comment->save();
}
poster_id などの列名には、setPosterId を使用します。キャメルケースを使用すると、各大文字は事前にアンダースコアを示します。
Poster_Id -> PosterId posterid -> Posterid
データベースから値を取得するには:
//using the same database example as above
public function getAllByPoster($poster)
{
$collection = Mage::getModel('Demo/________')->getCollection();
$collection->addFilter('poster', $poster);
return collection;
}
これにより、特定の投稿者によるすべての投稿が返されます。ただし、1 つ問題があります。このクラスには get コレクションが定義されていません。getAllByPoster からこれらの結果を表示する方法を確認する前に、作成する最後のファイルが 1 つあります。
//Test/Demo/Model/Mysql4/Comment/Collection.php
class Test_Demo_Model_Mysql4_Comment_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract
{
protected function _construct()
{
$this->_init('comments/comment');
}
}
この時点で、magento のクラスを使用してデータベースを読み書きするために必要なものはすべて揃っています。コレクションを印刷するには、次のようにします。
foreach (Mage::getModel('demo/_____')->getAllByPoster($id) as $something)
それらから取得したい個々の属性を表示します。