运行`migrate:create`命令 如: ~~~ php console migrate:create UpdateBookTable ~~~ 将会创建一个文件名为`YYYYMMDDHHMMSS_update_book_table.php`的文件 前面14位时间戳就是版本号 里面的内容大概是这样的 ~~~ <?php use Think\Migration\Migration; class UpdateBookTable extends Migration { /** * Change Method. * public function change(){ } */ /** * Migrate Up. */ public function up() { } /** * Migrate Down. */ public function down() { } } ~~~ ### Up 方法 迁移的时候执行的方法 ### Down 方法 回滚的时候执行的方法 ### Change 方法 迁移的时候执行的方法,回滚的时候会逆向执行里面对数据库结构的操作 比如 ~~~ <?php use Think\Migration\Migration; class CreateUserLoginsTable extends Migration { /** * Change Method. * public function change() { // create the table $table = $this->table('user_logins'); $table->addColumn('user_id', 'integer') ->addColumn('created', 'datetime') ->create(); } /** * Migrate Up. */ public function up() { } /** * Migrate Down. */ public function down() { } } ~~~ > 在`change`方法里创建或者更新数据表结构的时候,必须使用Table的`create()`或者`update()`方法 , 使用`save()`的时候工具不能自动判断是创建还是更新 #### Table有以下方法 > * createTable > * renameTable > * addColumn > * renameColumn > * addIndex > * addForeignKey ### 直接执行SQL语句 ~~~ <?php use Think\Migration\Migration; class MyNewMigration extends Migration { /** * Migrate Up. */ public function up() { // execute() $count = $this->execute('DELETE FROM users'); // returns the number of affected rows // query() $rows = $this->query('SELECT * FROM users'); // returns the result as an array } /** * Migrate Down. */ public function down() { } } ~~~ ### 获取数据 ~~~ <?php use Think\Migration\Migration; class MyNewMigration extends Migration { /** * Migrate Up. */ public function up() { // fetch a user $row = $this->fetchRow('SELECT * FROM users'); // fetch an array of messages $rows = $this->fetchAll('SELECT * FROM messages'); } /** * Migrate Down. */ public function down() { } } ~~~