提问者:小点点

CakePHP表即使存在也会丢失


我试着谷歌搜索,也在这里搜索答案,

问题所在

CakePHP找不到表,即使它存在。

我尝试的是:

  1. 正在清除缓存文件夹
  2. 正在验证表的名称

代码

class Url extends AppModel {
    public function add_url($the_url,$the_content,$title) {
        $this->create();
        $this->set('url', $the_url );
        $this->set('content', $the_content );
        $this->set('title', $title );
        $this->save();
    }
} 

错误:

缺少数据库表

错误:在数据源默认设置中找不到模型Url的表urls。

也许有人知道答案?


共2个答案

匿名用户

识别(或消除)缓存相关问题的一种方法是简单地禁用缓存:

/**
 * Turn off all caching application-wide.
 *
 */
Configure::write('Cache.disable', true);

如果这解决了问题,那么有必要仔细研究一下为什么以前清除缓存的努力显然失败了。如果使用了基于文件的缓存,请确保删除tmp下的所有文件,如果使用了不同的缓存存储,请确保它实际上已被清除。

另一个相对常见的原因是数据库用户没有权限列出给定数据库中的表,这可以通过与模型相同的方式进行检查:

$db = ConnectionManager::getDataSource('default');
debug($db->listSources());
die;

如果根本没有列出任何表-请检查连接凭据并确保(例如)没有与权限相关的问题。通过cli执行与CakePHP相同的sql,并确保结果符合预期:

$ mysql -uuser -ppassword databasename
mysql> show tables from foo;
+-----------------+
| Tables_in_foo   |
+-----------------+
| posts           |
| urls            |
+-----------------+
2 rows in set (0.00 sec)

如果列出了表,那么请检查连接凭据,因为相关代码按预期工作,并且缺少的表实际上不存在于应用程序连接到的数据库中。

匿名用户

对于cakephp 2。*:删除文件夹app/tmp/cache/models中名为myapp\u cake\u model\u[数据库名称]\u list的文件将解决我的问题。