您的位置:首页 > 编程语言 > PHP开发

Yii2之数据库迁移

2020-07-16 06:05 591 查看

简介

众所周知,生产环境的数据库、测试环境的数据库以及线上环境的数据库结构是一样的,但是在开发环境中,难免会遇到添加字段或者修改字段这种修改数据库表的操作,所以

Yii
提供了一个 数据库迁移 功能,该功能可以记录数据库的变化, 以便使数据库和源代码一起受版本控制。

其实大概也就这些操作最熟悉不过了,其他具体请浏览Yii官方文档;
不得不吐槽的是

Yii2
官网的实例少之又少,又因为在共同开发中需要用到数据库迁移,所以写这篇文章,后续有补充会在更新

数据库迁移之命名规则

在这里只是定义自己的命名规则,PSR规范并没有强调,只是方便自己观看迁移文件路由而已~

  • 创建数据库表:
    create_tablename_{数据库表名}
  • 数据库表添加字段:
    add_column_to_{数据库表名}
  • 数据库表添加数据:
    add_auth_on_{数据库表名}
  • 数据库表删除字段:
    drop_xxx_from_{数据库表名}
  • 数据库表添加索引:
    add_index_to_{数据库表名}
  • 添加连接表:
    create_junction_xxx_and_yyy

创建数据库表

在控制台输入

php yii migrate/create create_tablename_{数据库表名}

public function safeUp()
{
//设置数据表的属性
$tableOptions = null;
if ($this->db->driverName === 'mysql') {
$tableOptions = 'CHARACTER SET utf8 COLLATE utf8_general_ci ENGINE=InnoDB';
}

//创建一个表
$this->createTable('{{employee_interview}}', [
'id'                    => $this->primaryKey(),
'employee_id'           => $this->integer(11)->notNull()->comment('员工id'),
'jobnum'                => $this->string(11)->notNull()->comment('员工工号'),
'name'                  => $this->string(11)->notNull()->comment('员工姓名'),
'jobstation'            => $this->string(11)->notNull()->comment('员工岗位'),
'resign'                => $this->string(11)->notNull()->comment('员工在职情况'),
'entryDate'             => $this->string(11)->notNull()->comment('员工入职时间'),
'job_rank'              => $this->string(30)->notNull()->comment('员工岗位等级'),
'dept'                  => $this->string(30)->notNull()->comment('员工部门'),
'is_transfer'           => $this->string(50)->notNull()->defaultValue('N')->comment('是否愿意调岗:N/否,(描述)/是'),
'work_record'           => $this->string(500)->notNull()->defaultValue('')->comment('工作能力记录'),
'work_level'            => $this->string(100)->notNull()->defaultValue('')->comment('工作能力评级'),
'worth_record'          => $this->string(500)->notNull()->defaultValue('')->comment('价值观记录'),
'worth_level'           => $this->string(100)->notNull()->defaultValue('')->comment('价值观评级'),
'other'                 => $this->string(255)->notNull()->defaultValue('')->comment('其他'),
'delete_at'             => $this->integer(11)->notNull()->defaultValue(0)->comment('删除时间'),
], $tableOptions);

//增加或者修改一个表备注
$this->addCommentOnTable('{{employee_interview}}','员工访谈记录信息表');
}

在这里简单说明一下,

  • $this->string
    : 这里是指当前定义的字段类型
  • notNull
    :字段类型不能为空
  • defaultValue
    :字段模型值
  • comment
    :字段备注

添加字段

在控制台输入

php yii migrate/create add_column_to_{数据库表名}

public function safeUp()
{
//addColumn('表名','字段', '属性')
$this->addColumn('negative_review','choose', $this->tinyInteger(1)->notNull()->defaultValue(0)->comment('是否自动分类(1:自动分类 2:否)'));
$this->addColumn('comment_answer','file', $this->string(255)->notNull()->defaultValue('')->comment('数据分析图路径'));
}

添加索引

在控制台输入

php yii migrate/create add_index_on_{数据库表名}

public function safeUp()
{
$this->createIndex('idx_order_num', 'product_evaluation_product', ['order_num']);
}

添加数据

在控制台输入

php yii migrate/create add_auth_to_{数据库表名}

public function safeUp()
{
$data = [
['Index', 0, '行政管理-列表' , 'N;'],
['gift-giving', 0, '行政管理-转增' , 'N;']
];
$column = ['name', 'type', 'description', 'data'];
Yii::$app->db->createCommand()->batchInsert('{{%auth_item}}', $column, $data)->execute();
}

修改数据

在控制台输入

php yii migrate/create update_auth_to_{数据库表名}

public function safeUp()
{
Yii::$app->db->createCommand()->update('auth_item', ['description' => '访谈问题-回复'] ,['name' => 'ReplyAddInterview'])->execute();
Yii::$app->db->createCommand()->update('auth_item', ['description' => '访谈问题-修改'] ,['name' => 'ReplyEditInterview'])->execute();
}

删除数据

在控制台输入

php yii migrate/create del_auth_to_{数据库表名}

public function safeUp()
{
Yii::$app->db->createCommand()->delete('auth_item', ['name' => 'AddInterview'])->execute();
Yii::$app->db->createCommand()->delete('auth_item', ['name' => 'EditInterview'])->execute();
}

提交迁移

./yii migrate   //提交所有迁移,但是已经迁移过的文件不会被执行
./
./yii migrate XXX_xxx_XXX_table     //**指定类名**,提交一个迁移文件

还原迁移

./yii migrate/down      //还原最近一次迁移
./yii migrate 3         //提交前三个可用的迁移
./yii migrate/down 3    //还原最近三次迁移

重做迁移

重做迁移的意思是先还原指定的迁移,然后再次提交:

./yii migrate/redo  //重做最近一次提交的迁移
./yii migrate/redo //重做最近三次提交的迁移

列出迁移

可以通过指令列出提交或者未提交的迁移:

./yii migrate/history  //显示最近10次提交的迁移
./yii migrate/history 6 //显示最近5次提交的迁移
./yii migrate/history all //显示所有的提交迁移

./yii migrate/new //显示最近10次未提交的迁移
./yii migrate/new 6 //显示最近6次未提交的迁移
./yii migrate/new all //显示所有的未提交迁移

其他操作数据库的方法

yii\db\Migration::execute(): 执行一条 SQL 语句
yii\db\Migration::insert(): 插入单行数据
yii\db\Migration::batchInsert(): 插入多行数据
yii\db\Migration::update(): 更新数据
yii\db\Migration::delete(): 删除数据
yii\db\Migration::createTable(): 创建表
yii\db\Migration::renameTable(): 重命名表名
yii\db\Migration::dropTable(): 删除一张表
yii\db\Migration::truncateTable(): 清空表中的所有数据
yii\db\Migration::addColumn(): 加一个字段
yii\db\Migration::renameColumn(): 重命名字段名称
yii\db\Migration::dropColumn(): 删除一个字段
yii\db\Migration::alterColumn(): 修改字段
yii\db\Migration::addPrimaryKey(): 添加一个主键
yii\db\Migration::dropPrimaryKey(): 删除一个主键
yii\db\Migration::addForeignKey(): 添加一个外键
yii\db\Migration::dropForeignKey(): 删除一个外键
yii\db\Migration::createIndex(): 创建一个索引
yii\db\Migration::dropIndex(): 删除一个索引
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: