事件/观察者输入数据库

时间:2012-07-16 15:25:48

标签: magento

我有一个事件观察者在从admin部分下订单后创建一个日志。如何将其插入数据库而不是日志文件?任何人都可以提供一个很好的教程。

1 个答案:

答案 0 :(得分:2)

http://www.magentocommerce.com/knowledge-base/entry/magento-for-dev-part-5-magento-models-and-orm-basics/

首先,您需要将setup / read / write部分添加到config.xml中。假设您的模块是Test / Demo,那么您的设置部分可能看起来像这样:

  <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 / whateverywou',只要你在整个模块中保持相同的意思。 '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 - &gt; PosterId posterid - &gt; Posterid

从数据库中获取值:

//using the same database example as above
public function getAllByPoster($poster)
{
    $collection = Mage::getModel('Demo/________')->getCollection();
    $collection->addFilter('poster', $poster);
    return collection;
}

这将返回特定海报的所有帖子。但是有一个问题,尚未为此类定义集合。在我们看到如何从getAllByPoster中显示这些结果之前,我们有最后一个要创建的文件。

//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)

并显示我们想要的各个属性。