最近项目中用的是神通数据库。
一开始用这个数据库时,给表添加列,列名总是小写自动变大写,恼火得很。折腾了好久,后来才搞清楚sql语句里要在列名两边加双引号。
经过上面那一茬,对这数据库就没什么好印象了。
这次因为某些业务拓展,需要给表新增字段。
表里是新增成功了,可是yii里却始终保存不了数据,就是下面这行代码对新加的列不奏效:
$model->setAttributes($params, false);
打日志,$params里是有提交的新加列的数据。
追踪溯源,通过$model->attributes()发现里面并不包含新加的列对应的属性。
可问题出在哪儿呢?我直接就怀疑是神通数据库的问题。
神通数据库提供好几个工具,怀疑是不是自己直接通过sql语句加的,不能够影响到像mysql里information schema里的columns表。
然后只看到schema库,一张张表打开也没看到column信息存在哪里。
把表换个名字,再一同修改Model类里的表名,就OK了。可是我不要这样子无缘无故的修改表名啊。(其它服务器也有部署,随意修改只会给自己另外增加同步的工作)
实在没辙,就搁置了。
回来在网上搜到这个:
//flush all the schema cache Yii::$app->db->schema->refresh(); //clear the particular table schema cache Yii::$app->db->schema->refreshTableSchema($tableName);
试了,没鸟用。
最后解决方法:
删除yii项目里runtime/cache下的文件。
(我一开始在本地查runtime文件夹,可是本地项目根本就没运行过)
看上去也不是啥技术难题,记载下来,是想告诉自己:
当参与者有A和B时,千万别一股脑的以为一定是A或者是B出了问题。
上面过程中无非就涉及到“神通数据库添加列”和“yii框架里保存数据”这两个操作,我却不能快速想到可能性或许就是出现在后者身上。
看侦探剧,警察破案也是如此,都是先锁定所有存在可能性的嫌疑人,然后再来一个个的审问分析进行排除。
写这么多字,希望自己能够长点记性。