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

7jmck4yq  于 2022-11-09  发布在  其他
关注(0)|答案(4)|浏览(143)

我想在创建列之前检查一个数据库列是否存在于一个表中。我知道这可以很容易地用纯sql来完成,但是我想尝试用Yii的方式用db模式函数来完成。
下面的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.');
}
sqyvllje

sqyvllje1#

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

hrysbysz2#

根据Yii 2.0,它应该可以:

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

5rgfhyps3#

Yii2中的代码:

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

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

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

ibrsph3r

ibrsph3r4#

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

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

例如:

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

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

相关问题