1

Yii 1.1.8 版本

我在 mysql 数据库的表中添加了一列,但新列未显示在 $model->getAttributes() 方法调用的输出中

我删除了受保护/运行时文件夹中的所有文件,但仍然没有列

config: 'schemaCachingDuration' => 0, // 以秒为单位。<1 表示关闭

我可以直接在数据库中将数据添加到新列。

我还能做些什么来调试它吗?

索引.php

<?php

// change the following paths if necessary
$yii=dirname(__FILE__).'/../../framework/yii.php';
$config=dirname(__FILE__).'/protected/config/main.php';

// remove the following line when in production mode
    //debug
        defined('YII_DEBUG') or define('YII_DEBUG',true );
        //show profiler
        defined('YII_DEBUG_SHOW_PROFILER') or define('YII_DEBUG_SHOW_PROFILER',true);
        //enable profiling
        defined('YII_DEBUG_PROFILING') or define('YII_DEBUG_PROFILING',true);
        //trace level
        defined('YII_TRACE_LEVEL') or define('YII_TRACE_LEVEL',0);
        //execution time
        defined('YII_DEBUG_DISPLAY_TIME') or define('YII_DEBUG_DISPLAY_TIME',false);

require_once($yii);
Yii::createWebApplication($config)->run();

主文件

<?php
return CMap::mergeArray(array(
    'timeZone'=>'UTC',
    'basePath' => dirname(__FILE__) . DIRECTORY_SEPARATOR . '..',
    'catchAllRequest' => null, // null if online, array('site/offline') if offline,
    'sourceLanguage' => 'en_ca',
    'theme' => 'td',
    'charset' => 'UTF-8',
    'preload' => array('log'),
    'import' => array(
    'application.models.*',
    'application.components.*',
    'application.extensions.*'
    ),
    'modules' => array(
    ),
    // application components
    'components' => array(
    'format' => array(
    ),
    'user' => array(
        // enable cookie-based authentication
        'allowAutoLogin' => true,
        'autoRenewCookie' => true,
    ),
    'widgetFactory' => array(
        'enableSkin' => true,
    ),
    'urlManager' => array(
        ),
    ),
    'db' => array(
        'class' => 'CDbConnection',
        'connectionString' => 'mysql:host=localhost;dbname=mydb',
        'emulatePrepare' => true,
        'initSQLs'=>array("set time_zone='+00:00'"),
        'username' => 'root',
        'password' => '',
        'charset' => 'utf8',
        'tablePrefix' => 'tbl_',
        'enableParamLogging' => true, //show parameter values in log
//      'schemaCachingDuration' => 0, // in seconds.  <1 means off
        'enableProfiling' => YII_DEBUG_PROFILING, //show sql profile info in log
        'nullConversion' => true,
        //'initSQLs'=>array('set time_zone="+00:00"')
    ),
    'errorHandler' => array(
    ),
    'log' => array(
        'class' => 'CLogRouter',
        'routes' => array(
        array(
            'class' => 'CFileLogRoute',
            'levels' => 'error, warning',
            'filter' => 'CLogFilter',
            'enabled' => !YII_DEBUG
        ),
        array(
            'class' => 'CPhpMailerLogRoute',
            'levels' => 'error',
            'emails' => 'neilmcguigan+tderror@gmail.com',
            'filter' => 'CLogFilter',
            'enabled' => false,
        ),
        array(
            'class' => 'CWebLogRoute', // show log messages on web pages
            'enabled' => YII_DEBUG,
            'filter' => 'CLogFilter',
        //'showInFireBug' => false
        ),
        array(
            'class' => 'CProfileLogRoute',
            'enabled' => YII_DEBUG,
            'showInFireBug' => false
        )
        ),
    ),
    'request' => array(

    ),
    'securityManager'=>array(

    )
    ),
    // application-level parameters that can be accessed
    // using Yii::app()->params['paramName']
    'params' => array(
    ),
), require(dirname( __FILE__ ) . '/override.php'));
4

2 回答 2

1

在表格中添加新列后,只需转到 Gii,然后单击模型生成器。在那里再次输入您的表格名称,然后单击预览。将有一个diff单击选项,然后复制突出显示的绿色代码并将其复制粘贴到您的原始模态中,或者更好地更新覆盖您的整个模态。然后检查您是否能够获取内部的值并能够获取属性。这应该有效。

于 2013-09-26T05:53:50.067 回答
1

刚刚解决了这个问题——我发现新的字段名称需要在模型的 attributeLabels 函数中

public function attributeLabels()
{
    return array(
        'id' => 'ID',
        'newfield' => 'New Field',
        ...

如果您像我一样并且在您的模型中有很多自定义代码,请小心使用“最好还是更新覆盖您的整个模型”的建议。正如 Sankalp Singha 建议的那样,只需从使用 gii 复制“差异”(绿色部分)并将属性标签中的部分添加到您的代码中。

于 2014-09-19T18:08:02.257 回答