ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
1. [thinkphp官方migrate应用文档](https://www.kancloud.cn/thinkphp/master-database-and-model/265553) 1. [文档1](https://www.bobcoder.cc/index/post/detail/id/145.html) 1.[Migration官方文档]() 1. [原代码](https://github.com/top-think/think-migration/tree/2.0/src) 在migrate中有三个方法        up:在migrate:run时执行(前提是文件中不存在change方法)       down:在migrate:rollback时执行(前提是文件中不存在change方法)       change:migrate:run 和migrate:rollback时执行 (如果存在该方法 则不会去执行up 与down) ``` createTable(创建表) renameTable(重命名表) addColumn(添加字段) renameColumn(重命名字段) addIndex(添加索引) addForeignKey(添加外键) ``` # 命令行使用方法 think migrate:create,文件名须采用**驼峰命名法** 首字母必须用大写 migrate:rollback  -t回滚到制定的版本 ### 可用字段 数据库结构构造器包含了许多字段类型,供你构建数据表时使用: | 命令 | 描述 | | --- | --- | | `Column::bigInteger('votes');` | 相当于 BIGINT 型态。 | | `Column::binary('data');` | 相当于 BLOB 型态。 | | `Column::boolean('confirmed');` | 相当于 BOOLEAN 型态。 | | `Column::char('name', 4);` | 相当于 CHAR 型态,并带有长度。 | | `Column::date('create_time');` | 相当于 DATE 型态。 | | `Column::dateTime('create_time');` | 相当于 DATETIME 型态。 | | `Column::decimal('amount', 5, 2);` | 相当于 DECIMAL 型态,并带有精度与基数。 | | `Column::enum('choices', ['foo', 'bar']);` | 相当于 ENUM 型态。 | | `Column::float('amount');` | 相当于 FLOAT 型态。 | | `Column::integer('votes');` | 相当于 INTEGER 型态。 | | `Column::json('options');` | 相当于 JSON 型态。 | | `Column::jsonb('options');` | 相当于 JSONB 型态。 | | `Column::longText('description');` | 相当于 LONGTEXT 型态。 | | `Column::mediumInteger('numbers');` | 相当于 MEDIUMINT 型态。 | | `Column::mediumText('description');` | 相当于 MEDIUMTEXT 型态。 | | `Column::smallInteger('votes');` | 相当于 SMALLINT 型态。 | | `Column::string('email');` | 相当于 VARCHAR 型态。 | | `Column::string('name', 100);` | 相当于 VARCHAR 型态,并带有长度。 | | `Column::text('description');` | 相当于 TEXT 型态。 | | `Column::time('sunrise');` | 相当于 TIME 型态。 | | `Column::tinyInteger('numbers');` | 相当于 TINYINT 型态。 | | `Column::timestamp('added_on');` | 相当于 TIMESTAMP 型态。 | | `Column::uuid('id');` | 相当于 UUID 型态。 | ### 字段修饰 除了上述的字段类型列表,还有一些其它的字段「修饰」,你可以将它增加到字段中。例如,若要让字段「nullable」,那么你可以使用`setNullable`方法: ~~~ $this->table('user') ->addColumn(Column::string('name')->setNullable()) ->create(); ~~~ 以下列表为字段的可用修饰。 | 修饰 | 描述 | | --- | --- | | `->setAfter('column')` | 将此字段放置在其它字段「之后」(仅限 MySQL) | | `->setComment('my comment')` | 增加注释 | | `->setDefault($value)` | 为此字段指定「默认」值 | | `->setNullable()` | 此字段允许写入 NULL 值 | | `->setUnsigned()` | 设置 `integer` 字段为 `UNSIGNED` | ### 特殊字段 ~~~ $this->table('user') ->addTimestamps() //添加create_time和update_time两个字段 ->addSoftDelete() //添加delete_time字段 ->addMorphs('taggable') //加入整数 taggable_id 与字符串 taggable_type ->create(); ~~~ # 新增表 ``` //表改名称 ->renameTable('新的表名称') ->save(); ``` ``` // create the table $table = $this->table('users',array('engine'=>'MyISAM')); $table->addColumn('username', 'string',array('limit' => 15,'default'=>'','comment'=>'用户名,登陆使用')) ->addColumn('password', 'string',array('limit' => 32,'default'=>md5('123456'),'comment'=>'用户密码')) ->addColumn('login_status', 'boolean',array('limit' => 1,'default'=>0,'comment'=>'登陆状态')) ->addColumn('login_code', 'string',array('limit' => 32,'default'=>0,'comment'=>'排他性登陆标识')) ->addColumn('last_login_ip', 'integer',array('limit' => 11,'default'=>0,'comment'=>'最后登录IP')) ->addColumn('last_login_time', 'datetime',array('default'=>0,'comment'=>'最后登录时间')) ->addColumn('is_delete', 'boolean',array('limit' => 1,'default'=>0,'comment'=>'删除状态,1已删除')) ->addIndex(array('username'), array('unique' => true)) ->create(); ``` # 表字段变更 ``` //重命名字段 $this->table('user')->renameColumn('old_name','new_name'); //修改字段属性 $this->table('user')->changeColumn(Column::integer('votes')->setNullable()); //移除字段 $this->table('user')->removeColumn('name'); ```