在CakePHP中创建临时表并将其作为模型加载

3

我的计划是使用$this->Model->query()方法创建一个临时表,然后将其作为模型加载,但我遇到了“缺少数据库表”的错误。将调试级别设置为二级可以显示成功创建临时表,但出于某种原因,当我尝试将其作为模型加载时,它不起作用。看起来Cake甚至没有尝试查看表是否存在,因为没有显示“SHOW FULL COLUMNS FROM ...”查询。不确定如何强制Cake检查其是否存在。

$tmpModel = 'tempModel';
$tmpTable = 'temp_models';

$this->Model->query('CREATE TEMPORARY TABLE `'.$tmpTable ... );
$this->loadModel($tmpModel);

提前感谢您。


也许是 "CREATE TEMPORARY TABLE"! - Igor
谢谢,那是我打错了,因为我尝试使用普通表格来查看它们是否以这种方式工作。(它们不行) - user490152
你能否修改一下你的问题,让它对那些将来会检查它的人有意义。具体来说,是什么问题以及以下的解决方案。谢谢。 - Igor
3个回答

6

$tmpModel = 'TempModel'; // 驼峰命名法

也可以尝试使用 ClassRegisty::init($tmpModel);

最终问题可能是缓存,但我不这么认为。


谢谢,这些是你一旦知道了就能节省很多时间的东西。 - user490152

3

好的,在查找了一会儿后,我找到了一个可行的解决方案。 问题是Cake已经在页面加载时加载了模型缓存,因此使用它们作为表存在的参考。为了解决这个问题,我使用了"App::import('Model', $tmpModel);",它创建了新的modelCache,使loadModel脚本能够成功运行。

$tmpModel = 'tempModel';
$tmpTable = 'temp_models';

$this->Model->query('CREATE TEMPORARY TABLE `'.$tmpTable ... );
App::import('Model', $tmpModel);
$this->loadModel($tmpModel);

无论如何感谢你


2

2
虽然这理论上回答了问题,但最好在此处包含答案的基本部分,并提供参考链接。 - Spontifixus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接