6

我希望在创建列之前检查表中是否存在数据库列。我知道这可以使用纯 sql 轻松完成,但我想尝试使用 db 模式函数以 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

4 回答 4

13

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

$table = Yii::$app->db->schema->getTableSchema('mytable');
if (!isset($table->columns['somecolumn'])) {
    // do something
}
于 2015-12-04T12:45:53.620 回答
12
// Fetch the table schema
$table = Yii::app()->db->schema->getTable('mytable');
if(!isset($table->columns['somecolumn'])) {
    // Column doesn't exist
}
于 2013-08-31T09:38:35.603 回答
8

Yii2中的代码:

$columnData = $this
    ->getDb()
    ->getSchema()
    ->getTableSchema('table_name')
    ->getColumn('column_name');

if ($columnData) {
    // Columns exists, do something!
}

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

于 2017-07-17T10:19:36.130 回答
2

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

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

例如:

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

if( $model->hasAttribute($varname) )
于 2013-08-31T01:46:58.793 回答