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

wz3gfoph  于 2022-11-12  发布在  PHP
关注(0)|答案(2)|浏览(120)

我发现了this类似的问题,但我的问题不同。
我把我的CakePHP 2.2应用程序移到了另一个服务器上。在迁移之前没有任何问题。在迁移之后大部分事情都能正常工作。我可以访问我的大部分数据库表等等。但是当我试图访问我的一个表时,我得到了这个错误:

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

为了解决这个问题,我检查了这个文件夹:“/app/tmp/缓存/模型”
在该文件夹中,我的每个表都有一个文件

  • 我的应用程序_蛋糕_模型_默认值_我的数据库_表1
  • 我的应用程序蛋糕模型默认值我的数据库表2
  • 我的应用程序_蛋糕_模型_默认值_我的数据库_表3等。

但是没有stats表的文件。这可能是问题所在吗?或者我该如何解决这个问题?
(拥有“/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"
));
8mmmxcuj

8mmmxcuj1#

您是否检查过您的数据库,例如在phpMyAdmin或MySql workbench中?该表是否存在于数据库中?
错误消息指出无法使用预设连接存取数据表。可能是数据表确实遗失,或是您用来连接数据库的使用者没有该数据表的适当权限。
如果从另一个服务器迁移了数据库,导入时是否收到错误消息?如果未创建包含在事务中的转储,则可能只导入了部分数据库转储。

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

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

5lhxktic

5lhxktic2#

如果这对2020年的任何人都有帮助的话。我遇到了这个问题,即使是对模型有完全权限。我试着像@theJeztah建议的那样做,这是清除缓存/持久性,但问题仍然存在。最后的工作是在app/core file中将Configure::write('debug', 0)切换到Configure::write('debug', 2)。大概在调试时,它清除该高速缓存的效果更好。

相关问题