提问者:小点点

CakePHP数据库表,缺少数据源默认值


我发现了类似的问题,但我的问题不同。

我将我的CakePHP 2.2应用程序移动到另一个服务器。迁移前不存在问题。迁移后,大多数事情都运行良好。我可以访问我的数据库表等。但是当我试图到达我的一个表我得到这个错误:

"Error 500: Table stats for model Stat was not found in datasource default."

为了解决这个问题,我检查了这个文件夹:“/app/tmp/缓存/模型”

在该文件夹中,我的每个表都有一个文件

  • myapp_cake_model_default_mydatabase_table1

但是没有统计表的文件。这可能是问题所在吗?或者我该如何解决这个问题?

(/app/tmp/缓存/模型文件夹的权限为755)

在数据库中。我有这个:

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"
));

共2个答案

匿名用户

您是否检查过您的数据库,例如在phpMyAdmin或MySql workbench中?数据库中是否存在该表?

错误消息表明无法使用默认连接访问该表。可能是该表确实丢失了,或者您用于连接数据库的用户没有该表的正确权限。

如果从另一台服务器迁移数据库,导入时是否收到错误消息?如果未创建包含在事务中的转储,则可能仅部分导入了数据库转储。

[更新]这一建议解决了问题;

app/tmp/cache/persistent/app/tmp/cache/models中删除所有文件,然后启用调试。SQL日志/调试应该显示CakePhp用于检测数据库中是否存在表的查询。此外,您还可以检查Cake是否能够毫无问题地写入tmp文件

匿名用户

如果这对2020年的任何人都有帮助。即使拥有对模型的完全权限,我也有这个问题。我试着像@theJeztah建议的那样清除缓存/持久化,但问题仍然存在。最终起作用的是将app/core文件中的Configure::write('debug',0)切换到Configure::write('debug',2)。大概在调试时,它会更好地清除缓存。