gpt4 book ai didi

mysql - CakePHP 添加的列没有出现在查询中

转载 作者:可可西里 更新时间:2023-11-01 07:27:44 24 4
gpt4 key购买 nike

我已将 new_column 添加到 MySQL 生产服务器上的 MyISAM 表中。

我已经从/app/tmp/models 文件夹中删除了相应的模型缓存文件。

重新加载页面并检查后,为模型新生成的缓存文件包含新列

新列不会出现在 SQL 查询中,或者在使用字段 => null 读取时出现。

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 列(为什么这是个问题?)
  • 该模型是来自插件的扩展类
  • 新列定义为 TEXT DEFAULT null
  • 之前对表格的更新给出了预期的结果
  • 应用的本地开发副本没有这个问题
  • 测试 Controller 操作启用 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

最佳答案

每当您更新生产中的应用程序(调试设置为 0)时,您必须清除 app/tmp/cache 中的所有缓存文件(但不是目录)。

导致此问题的实际缓存是 app/tmp/cache/persistent/_cake_core_method_cache。不要让持久部分欺骗了你,就像我一样。

参见 this great answer了解更多详情。

关于mysql - CakePHP 添加的列没有出现在查询中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19236019/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com