mysql – CakePHP添加列不会出现在查询中
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql – CakePHP添加列不会出现在查询中,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1889字,纯文字阅读大概需要3分钟。
内容图文
![mysql – CakePHP添加列不会出现在查询中](/upload/InfoBanner/zyjiaocheng/910/7ee6715df56a421ba62b74aa5fdf90f6.jpg)
我在MySQLproduction服务器上的MyISAM表中添加了一个new_column.
我从/ app / tmp / models文件夹中删除了相应的模型缓存文件.
重新加载页面并检查后,新生成的模型缓存文件包含新列.
使用fields =>读取时,新列不会出现在SQL查询或结果中空值.
debug($this->read(null, $id));
//Query generates fields: SELECT Model.column_a, Model.column_b, Model.id WHERE ...
//Results do not include the new column
debug($this->read(array('new_column'), $id));
//Query generates fields: SELECT Model.new_column, Model.id WHERE ...
//Results include the new column and id
可能的警告和其他信息:
>该表有39列(为什么这会有问题?)
>该模型是插件中的EXTENDED类
>新列定义为TEXT DEFAULT null
>该表的先前更新给出了预期结果
>应用程序的本地开发副本没有此问题
>测试控制器操作启用Configure :: write(debug => 2)
> CakePHP 2.3.6,PHP 5.4.19,MySQL 5.1.70
如何使模型识别新表定义?我应该调查其他缓存系统吗?
编辑#1:
debug($this->ModelName->getDataSource()->describe('table_name'));
// outputs all columns
// ...
'new_column' => array(
'type' => 'text',
'null' => true,
'default' => null,
'length' => null,
'collate' => 'utf8_general_ci',
'charset' => 'utf8'
)
编辑#2:
我试过完全禁用缓存.虽然该模型选择了新列,但它并不是真正的解决方案.
Configure::write('Cache.disable', true);
// new_column appears in both query and results
编辑#3:
进一步调试表明这两个结果之间存在差异:
$this->ModelName->getDataSource()->fields($this->Model, 'ModelName');
//returns fields without new_colum
array_keys($this->ModelName->schema());
//returns fields with new_column
这暂时解决了这个问题:
$ds = $this->ModelName->getDataSource();
$ds->cacheMethods = false;
...
DboSource的方法缓存是此问题的根源.慢慢走到最底层……:D
解决方法:
每当更新正在生产的应用程序(debug设置为0)时,您必须清除app / tmp / cache中的所有缓存文件(但不清除目录).
导致此问题出现问题的实际缓存是app / tmp / cache / persistent / _cake_core_method_cache.不要让执着的部分欺骗你,就像我一样.
有关详细信息,请参见this great answer.
内容总结
以上是互联网集市为您收集整理的mysql – CakePHP添加列不会出现在查询中全部内容,希望文章能够帮你解决mysql – CakePHP添加列不会出现在查询中所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。