我发现了这个类似的问题,但我的问题不同。
我把我的CakePHP 2.2应用程序移到了另一台服务器上。迁移之前不存在任何问题。迁移后,大多数事情都很好。我可以访问我的大多数数据库表等。但当我试图访问我的一个表时,我会得到这个错误:
"Error 500: Table stats for model Stat was not found in datasource default."
为了解决这个问题,我检查了这个文件夹:"/app/tmp/cache/models"
在那个文件夹中,我的每张表都有一个文件
- myapp_cake_model_default_mydatabase_table1
- myapp_cake_model_default_mydatabase_table2
- myapp_cake_model_default_mydatabase_table3等等
但统计表并没有文件。这会是问题吗?或者我该如何解决这个问题?
("/app/tmp/cache/models"文件夹的权限为755)
在Database.php中我有这个:
public $default = array(
'datasource' => 'Database/Mysql',
'persistent' => false,
'host' => 'localhost',
'login' => 'myuser',
'password' => 'mypass',
'database' => 'mydatabase',
'prefix' => '',
'encoding' => 'utf8',
);
编辑:
正如我在thaJeztah的回答评论中所指出的,在删除app/tmp/cache/persistent
中的所有文件后,问题解决了。CakePHP创建了新的模型缓存文件,并成功了。一年后,我发现了真正的问题。问题是设置蛋糕模型文件的清除持续时间。我将清除缓存设置为+999天,因此不会重新生成模型文件。在进行模型更改时,您可以设置较低的模型缓存清除值:
Cache::config('_cake_model_', array(
'engine' => "File",
'prefix' => "myapp_". 'cake_model_',
'path' => CACHE . 'models' . DS,
'serialize' => ($engine === 'File'),
'duration' => "+999 days"
));
您是否检查过数据库,例如在phpMyAdmin或MySql工作台中?数据库中是否存在该表?
错误消息表示无法使用默认连接访问该表。可能是该表确实丢失了,或者您用来连接到数据库的用户没有该表的正确权限。
如果您从另一台服务器迁移了数据库,导入时是否收到错误消息?如果您没有创建包含在事务中的转储,则可能只是部分导入了数据库转储。
[更新]这个建议解决了问题;
从app/tmp/cache/persistent
和/app/tmp/cache/models
中删除所有文件,然后启用调试。SQL日志/调试应该显示CakePhp用来检测数据库中是否存在表的查询。此外,您还可以检查Cake是否在没有问题的情况下写入tmp文件
如果这对2020年的任何人都有帮助。即使对模型拥有完全权限,我也遇到了这个问题。我试着像@theJeztah建议的那样清除缓存/持久性,但问题仍然存在。最终起作用的是在app/core file
中将Configure::write('debug', 0)
切换到Configure::write('debug', 2)
。大概在调试时,它会更好地清除缓存。