文章大纲

给数据库表添加了列,yii里对应模型却无法识别到该属性

2020年08月07日 22:11

最近项目中用的是神通数据库。


一开始用这个数据库时,给表添加列,列名总是小写自动变大写,恼火得很。折腾了好久,后来才搞清楚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框架里保存数据”这两个操作,我却不能快速想到可能性或许就是出现在后者身上。


看侦探剧,警察破案也是如此,都是先锁定所有存在可能性的嫌疑人,然后再来一个个的审问分析进行排除。


写这么多字,希望自己能够长点记性。



  • 2020年08月07日 21:32文章创建
  • 2020年08月07日 22:11文章发布
我要评论
评论列表
暂无评论,期待你的评论哦!
回到顶部