加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

php – Magento的魔术设置器只更新了一些db列

发布时间:2020-12-11 23:44:22 所属栏目:MySql教程 来源:网络整理
导读:我有一个自定义的mysql表,我们将调用module_identifiers,并在我的模块中调用一个名为Identifiers的模型.这是我的设置脚本: $installer = $this;$installer-startSetup();$installer-run("CREATE TABLE `{$installer-getTable('module_identifiers')}` ( `mo

我有一个自定义的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数组有正确的数据.我究竟做错了什么? 最佳答案 如果有人最终在这里寻找这个非常令人沮丧的问题的答案,那就是这个.

Magento在var / cache中缓存其表描述(即使你没有在后端切换任何缓存)(参见lib / Varien / Db / Adapter / Pdo / Mysql.php :: describeTable()).当它插入或更新任何表时,它首先检查此缓存以查看它是否具有准备好的表的描述.如果找到一个,它将返回表的缓存描述,如果传递给$model-> save()的数组中的任何字段没有出现在此缓存的描述中,它们将不会插入到表,导致上述症状.

因此,如果您正在摆弄在phpMyAdmin中插入列(甚至重新运行您的安装脚本),Magento将不会看到它们,也不会插入您的数据.

荒谬简单的解决方案就是做一个rm -rf var / cache / *

编辑2014.01.10:如果您的站点使用内存缓存,则需要清除此缓存以使更改生效.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读