1

Magento 设置功能不适用于除 faq_question、faq_answer 之外的任何其他列。主键只是继续增加,但数据没有插入到列中。

不管我给列名起什么名字,但它只是继续显示为空。奇怪的是,如果我手动填充该文件并使用它,getFaqJugaad()那么它就可以工作。我可以从数据库中获取值。但没有设置请帮忙。谢谢

配置文件

    <?xml version="1.0" encoding="UTF-8"?>

<config>
    <modules>
        <Gagan_Faq>
            <version>0.2.0</version>
        </Gagan_Faq>
    </modules>



<frontend>
    <routers>
        <faq>
            <use>standard</use>
            <args>
                <module>Gagan_Faq</module>
                <frontName>faq</frontName>
            </args>
        </faq>
    </routers>
   <layout>
        <updates>
            <faq>
                <file>gaganfaq.xml</file>
            </faq>
        </updates>
    </layout>
</frontend>

<global>
    <blocks>
        <faq>
            <class>Gagan_Faq_Block</class>
        </faq>
    </blocks>
    <helpers>
        <faq>
            <class>Gagan_Faq_Helper</class>
        </faq>
    </helpers>
    <models>
        <faq>
            <class>Gagan_Faq_Model</class>
            <resourceModel>faq_mysql4</resourceModel>
        </faq>
        <faq_mysql4>
            <class>Gagan_Faq_Model_Mysql4</class>
            <entities>
                <dinkchika>
                    <table>gagan_faq</table>
                </dinkchika>
                <dinkchika02>
                    <table>gagan_faq_creation</table>
                </dinkchika02>
            </entities>
        </faq_mysql4>
    </models>

   <resources>
        <faq_setup>
            <setup>
                <module>Gagan_Faq</module>
            </setup>
            <connection>
                <use>core_setup</use>
            </connection>
        </faq_setup>
        <faq_write>
            <connection>
                <use>core_write</use>
            </connection>
        </faq_write>
        <faq_read>
            <connection>
                <use>core_read</use>
            </connection>
        </faq_read>
    </resources>        
</global>

这是我的安装脚本

<?php


$installer = $this;
$installer->startSetup();
$installer->run("


CREATE TABLE IF NOT EXISTS {$this->getTable('faq/dinkchika')} (
  `faq_id` int(11) NOT NULL AUTO_INCREMENT,
  `faq_question` varchar(255) DEFAULT NULL,
  `faq_answer` varchar(255) DEFAULT NULL,
  `faq_jugaad` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`faq_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


");

$installer->endSetup();

索引控制器

<?php

class Gagan_Faq_IndexController extends Mage_Core_Controller_Front_Action
{
    public function indexAction()
    {
        $this->loadLayout();
        $mod = Mage::getModel('faq/faq');
        $mod->setFaqQuestion('how are 5454you?');
        $mod->setFaqAnswer('gooddsfsfsdfsfdffsd?');
        $mod->setFaqJugaad('sfsfdsfsfsdfsfdffsd?');
        $mod->save();

        $this->renderLayout();
    }
}

数据库表

在此处输入图像描述

4

1 回答 1

3

如果 Magento 模型在运行 SQL 设置脚本后似乎无法正常工作,例如模型没有将值保存到 SQL 脚本明确添加的字段中,那么您很可能被 Magento 的DDL缓存所困。

除了其他东西(如CREATE,INDEXFOREIGN KEY语句),Magento 还缓存耗时DESCRIBE table语句的结果。然后 Magento 模型使用这些缓存的结果(例如保存时)以获得更好的性能。

现在,如果由于某种原因您的系统在运行更改表方案 () 的 SQL 脚本后未能更新此 DDL 缓存ALTER, ADD, DROP,您的模型仍将使用旧缓存,不知道有任何更改。

不幸的是,Magento 管理后端中没有一个清除缓存按钮/链接允许您按需清除 DDL 缓存。既不明确也不含蓄(至少afaik,如果我错了,请纠正我)。

清除 DDL 缓存

要清除 DDL 缓存,您可以使用瑞士军刀方法并简单地手动删除您的var/cache/*文件夹。请注意,这将清除所有现有的 Magento 缓存,而不仅仅是 DDL 缓存。

或者您可以调用Varien_Db_Adapter_Pdo_Mysql::resetDdlCache()它的许多衍生物之一,例如Mage_Core_Model_Resource_Setup::getConnection()->resetDdlCache().

resetDdlCache()方法允许您为单个表或一次为所有表重置 DDL 缓存。但请注意,这取决于_isDdlCacheAllowed属性的当前状态,是否会处理重置。

于 2013-03-15T11:23:13.370 回答