Yii在创建db列之前检查db列是否存在

时间:2013-08-30 19:52:39

标签: php function model yii

我想在创建列之前检查表中是否存在数据库列。我知道这可以使用纯sql轻松完成,但我想尝试使用数据库模式函数以Yii方式完成。

下面的if语句不起作用,因为没有getColumn函数,所以使用db-> schema可以用什么来检查列($ model-> VARNAME)是否存在?

if(!Yii::app()->db->schema->getColumn($form->TABLE_NAME, $model->VARNAME))
{
    if($model->save())
    {
        Yii::app()->db->schema->addColumn($form->TABLE_NAME, $model->VARNAME, $column_t);
        $this->redirect(array('view','field'=>$model->FIELD_ID));
    }
}
else
{
    $model->addError('VARNAME','Column "'.$model->VARNAME.'" already exists. Please pick a new column name.');
}

4 个答案:

答案 0 :(得分:10)

// Fetch the table schema
$table = Yii::app()->db->schema->getTable('mytable');
if(!isset($table->columns['somecolumn'])) {
    // Column doesn't exist
}

答案 1 :(得分:5)

根据Yii 2.0,它应该可以解决问题:

$table = Yii::$app->db->schema->getTableSchema('mytable');
if (!isset($table->columns['somecolumn'])) {
    // do something
}

答案 2 :(得分:3)

Yii2中的代码: {{1}}

如果列不存在,则返回null,否则返回包含有关现有列信息的对象。

答案 3 :(得分:2)

您需要使用 $model->hasAttribute()

if( $model->hasAttribute('VARNAME') )

<强> e.g:

if( $model->hasAttribute('title') )

if( $model->hasAttribute($varname) )