Cakephp 1.3.14没有加载数据库模式

时间:2012-07-17 09:19:08

标签: mysql sql cakephp cakephp-1.3

我们最近对我们的网站进行了一些更改,以便为预生产做好准备:

  • 转移到负载均衡架构
  • 现在使用memcache / memcached来维护会话数据
  • 启用APC

现在,一切正常,直到我们做出一些我们无法回想起的更改导致数据库无法正确加载架构。这是一些调试的输出:

    Warning (512): SQL Error: 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1 [CORE/cake/libs/model/datasources/dbo_source.php, line 684]

    Query: SHOW FULL COLUMNS FROM

    Warning (2): Invalid argument supplied for foreach() [APP/models/datasources/dbo/dbo_mysql.php, line 127]

    Warning (2): array_keys() expects parameter 1 to be array, boolean given [CORE/cake/libs/model/datasources/dbo_source.php, line 1968]

    Notice (8): Trying to get property of non-object [CORE/cake/libs/model/datasources/dbo_source.php, line 812]

    Query: SHOW FULL COLUMNS FROM

    Query: SHOW FULL COLUMNS FROM

    Query: SHOW FULL COLUMNS FROM

    Query: SHOW FULL COLUMNS FROM

    Query: SHOW FULL COLUMNS FROM

    Query: SHOW FULL COLUMNS FROM 

如您所见,它没有加载表名。

我们注意到的另一个问题是,在生成查询时,会生成如下:

SELECT Project.id FROM AS Project WHERE 1=1

请注意,没有表名,它只是尝试在空表名上创建别名。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

  

我们最近对我们的网站进行了一些更改,以便为预生产做好准备:

值得庆幸的是,您可以对代码更改进行版本控制,只需回滚直到找到可用的版本并进行比较即可找到重大变化。使用git,可以使用git bisect轻松完成。

没有?以及..

调试并确定原因

与任何错误一样 - 第一步应该是查看错误的来源:

// cake/models/datasources/dbo/dbo_mysql.php
$cols = $this->query('SHOW FULL COLUMNS FROM ' . $this->fullTableName($model));

foreach ($cols as $column) { // #127

这里应该清楚的是,Cake无法确定模型的完整表名。

您正在尝试查询没有表格的模型

查看fullTableName的来源:

// cake/libs/model/datasources/dbo_source.php
function fullTableName($model, $quote = true) {
        if (is_object($model)) {
                $table = $model->tablePrefix . $model->table;
        } elseif (isset($this->config['prefix'])) {
                $table = $this->config['prefix'] . strval($model);
        } else {
                $table = strval($model);
        }
        if ($quote) {
                return $this->name($table);
        }
        return $table;
}

应该很清楚,该模型根据蛋糕没有表格。

常见原因:

  • 模型属性useTable设置为false
  • 没有describe权限

鉴于问题中的信息 - 最有可能的是第一个原因。