我有一个自定义的mysql表,我们将调用module_identifiers
以及我的模块中名为Identifiers的相应模型。这是我的设置脚本:
$installer = $this;
$installer->startSetup();
$installer->run("
CREATE TABLE `{$installer->getTable('module_identifiers')}` (
`module_identifier_id` int(11) NOT NULL AUTO_INCREMENT,
`identifier` varchar(255) NOT NULL,
`customer_id` int(11) unsigned NOT NULL,
`profile_name` varchar(100) NOT NULL,
`provider` varchar(50) NOT NULL,
PRIMARY KEY (`module_identifier_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
");
$installer->endSetup();
在我的Module / Model / Identifiers.php
中class Namespace_Module_Model_Identifiers extends Mage_Core_Model_Abstract {
protected function _construct() {
$this->_init('module/identifiers');
}
}
在Module / Model / Mysql4 / Identifiers.php
中class Namespace_Module_Model_Mysql4_Identifiers extends Mage_Core_Model_Mysql4_Abstract {
protected function _construct() {
$this->_init('module/identifiers', 'module_identifier_id');
}
}
所以,当我想写这个表时,我一直这样做:
Mage::getModel('module/identifiers')
->setIdentifier($profile['identifier'])
->setCustomerId($customer_id)
->save();
在我添加了provider和profile_name列之前,这种方法很有效,而且这些列永远不会更新:
Mage::getModel('module/identifiers')
->setIdentifier($profile['identifier'])
->setProvider($profile['provider'])
->setProfileName($profile['profile_name'])
->setCustomerId($customer_id)
->save();
我删除了我的自定义表,从core_resource列表中删除了我的模块的安装脚本,以便它再次运行(它确实如此),并将新行添加到数据库中,但是它们缺少新列的数据。是的,我已经验证我的$ profile数组有正确的数据。我做错了什么?
答案 0 :(得分:18)
如果有人最终在这里寻找这个非常令人沮丧的问题的答案,那就是这个。
Magento在var / cache中缓存其表描述(即使你没有在后端切换任何缓存)(参见lib / Varien / Db / Adapter / Pdo / Mysql.php :: describeTable())。当它插入或更新任何表时,它首先检查此缓存以查看它是否具有准备好的表的描述。如果找到一个,它将返回表的缓存描述,如果传递给$ model-> save()的数组中的任何字段没有出现在此缓存的描述中,它们将不会插入到表,导致上述症状。
因此,如果您正在摆弄在phpMyAdmin中插入列(甚至重新运行您的安装脚本),Magento将不会看到它们,也不会插入您的数据。
荒谬简单的解决方案就是做rm -rf var/cache/*
EDIT 2014.01.10:如果您的网站使用内存缓存,则需要清除此缓存以使更改生效。
答案 1 :(得分:0)
通过知识库Models article开始工作,这将指导您完成设置基本模型所需的每个步骤。然后,单独测试您的个人模型以确保正确保存/设置,然后将该工作集成到模块的其余部分。