【问题标题】:Yii check if db column exists before creating itYii 在创建之前检查 db 列是否存在
【发布时间】:2013-09-03 15:11:51
【问题描述】:

我希望在创建列之前检查表中是否存在数据库列。我知道这可以使用纯 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.');
}

【问题讨论】:

    标签: php function model yii


    【解决方案1】:

    Yii2 中的代码:

    $columnData = $this
        ->getDb()
        ->getSchema()
        ->getTableSchema('table_name')
        ->getColumn('column_name');
    
    if ($columnData) {
        // Columns exists, do something!
    }
    

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

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

        【讨论】:

          【解决方案4】:

          你会想要使用 $model->hasAttribute()

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

          例如:

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

          【讨论】:

          • 我需要一种方法来检查是否存在与当前“$model”模型不同的表列(来自动态活动记录模型)。无论如何,我最终使用 db->createCommand() 列函数而不是 db->schema 解决了这个问题。无论如何谢谢:)
          • 我打算对此投反对票...它有效..如果您稍微看一下它就很有意义..而且它更简单易记。如果您的模型不同步,它甚至可以工作......并且主机注意到此列的“已定义”。
          • 建议用于 php7 : if( (new MyClass)->hasAttribute('my_column') ){
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-11-21
          • 2020-07-29
          • 1970-01-01
          • 2015-03-28
          • 2011-08-21
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多