缺少数据库表cakephp甚至表都在那里

时间:2014-07-21 13:51:04

标签: php cakephp cakephp-2.0 cakephp-2.3 cakephp-appmodel

我有一个数据库,其中所有表都以" bs"为前缀。 。我从bs_states表中烘焙了一个模型,它生成了以下代码。

<?php
App::uses('AppModel', 'Model');
/**
 * State Model
 *
 * @property country $Country
 * @property Seller $Seller
 */
class State extends AppModel {

/**
 * Use table
 *
 * @var mixed False or table name
 */
    public $useTable = '_states';

/**
 * Primary key field
 *
 * @var string
 */
    public $primaryKey = 'state_id';

/**
 * Display field
 *
 * @var string
 */
    public $displayField = 'state_iso';


    //The Associations below have been created with all possible keys, those that are not needed can be removed

/**
 * belongsTo associations
 *
 * @var array
 */
    public $belongsTo = array(
        'Country' => array(
            'className' => 'country',
            'foreignKey' => 'country_iso',
            'conditions' => '',
            'fields' => '',
            'order' => ''
        )
    );

/**
 * hasMany associations
 *
 * @var array
 */
    public $hasMany = array(
        'Seller' => array(
            'className' => 'Seller',
            'foreignKey' => 'state_id',
            'dependent' => false,
            'conditions' => '',
            'fields' => '',
            'order' => '',
            'limit' => '',
            'offset' => '',
            'exclusive' => '',
            'finderQuery' => '',
            'counterQuery' => ''
        )
    );

}

此代码在本地系统中运行良好,但当我将其上传到生产服务器时,它会显示以下消息。

  

缺少数据库表   错误:在数据源默认值中找不到模型状态的表bsstates。

最初我认为这是一个缓存问题,所以我做了以下事情:

  • 我已清除tmp / cache目录
  • 我将调试模式Configure::write('debug', 0);更改为Configure::write('debug', 2);

但没有运气。我仍然面临同样的问题。生产服务器上的数据库连接很好,因为其他模型工作正常。

3 个答案:

答案 0 :(得分:0)

删除$ useTable属性并使用

public $tablePrefix = 'bs_';

答案 1 :(得分:0)

当您处于生产环境中时,首先要查看日志。它们还提供了比调试打印更多的信息。导航到这里:

\app\tmp\logs

此错误通常伴随着桌面上的权限不足。确保Cake的db角色具有该表的权限。

既然你说它在本地工作正常就让我觉得它是一个数据库权限问题,而且CakePHP约定似乎也没有了。

Model类名称应为:

BsStates

,类变量$useTable应为:

public $useTable = 'bs_states';

答案 2 :(得分:0)

而不是写public $useTable = '_states'; 你可以写public $useTable = 'states'; 添加下划线() database.php中数据库配置中的前缀为&#39; bs _&#39;。

或在此文件中添加public $tablePrefix = 'bs_';