一、migrate初探
1、migrate使用 用sqlite做实验
在配置文件中database.php中选择sqlite,并保证默认的数据库是存在的,如果没有新建对应的数据库
'sqlite' => [ 'driver' => 'sqlite', 'database' => storage_path().'/database.sqlite', //就是在文件下stroage中的数据库文件database.sqlite 如果不存在需要新建 'prefix' => '', ],
用navicat连接这个sqlite数据库,发现这个库现在是空的,如图
在目录migration下发现有连个文件
2014_10_12_000000_create_users_table.php
2014_10_12_100000_create_password_resets_t
2、在命令行下执行 php artisan migrate ,如果migration下的文件有改动,将更改对应的sqlite数据表,结果如下图
此时在sqlite中将新建立对应的表,在navicat中查看如下
新建立了四张表,其中migration和sqlite_sequence是用来管理migration的。
重复步骤2 发现返回的结果是
表示在数据库中的文件与migration中的文件是一致的,没有更改。
在命令行输入php artisan发现关于migration的命令如下
migrate:refresh 如果发现数据表的字段名字有误或者是发现少个字段多个字段,此时执行php artisan migrate:refresh. 注意这个命令将会清空表中的数据。
migrate:rollback 将会撤销上步的php artisan migrate,就是建立的数据表将被删除
如何建立migration文件呢?
在命令行中执行php artisan make:migration create_articles_table --create="articles"
可以在项目的文件下看到新生成的一个文件如下
use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class CreateArticlesTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('articles', function(Blueprint $table) { $table->increments('id'); $table->timestamps(); //在数据表中会多两个字段 更改和添加的字段 类型是datetime 可以在这下面添加其他的数据类型
}); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::drop('articles'); } }
然后执行 php artisan migrate 就会生成对应的新表。
小结:
1、先通过 php artisan make:migration create_articles_table --create="articles" 生成对应的migration文件,在此文件中写好表中对应的字段。
2、再通过 php artisan migrate 在数据表中建立新表
3、如果发现表建立错了 撤销(就是删除表)的命令 php artisan rollback
注意php artisan refresh 是针对所有的表的。
二、migrate再探
写migrate来建立数据表,比用sql来写简单的多
$table->bigIncrements('id'); ID 自动增量,使用相当于「big integer」类型 $table->bigInteger('votes'); 相当于 BIGINT 类型 $table->binary('data'); 相当于 BLOB 类型 $table->boolean('confirmed'); 相当于 BOOLEAN 类型 $table->char('name', 4); 相当于 CHAR 类型,并带有长度 $table->date('created_at'); 相当于 DATE 类型 $table->dateTime('created_at'); 相当于 DATETIME 类型 $table->decimal('amount', 5, 2); 相当于 DECIMAL 类型,并带有精度与基数 $table->double('column', 15, 8); 相当于 DOUBLE 类型,总共有 15 位数,在小数点后面有 8 位数 $table->enum('choices', array('foo', 'bar')); 相当于 ENUM 类型 $table->float('amount'); 相当于 FLOAT 类型 $table->increments('id'); 相当于 Incrementing 类型 (数据表主键) $table->integer('votes'); 相当于 INTEGER 类型 $table->json('options'); 相当于 JSON 类型 $table->longText('description'); 相当于 LONGTEXT 类型 $table->mediumInteger('numbers'); 相当于 MEDIUMINT 类型 $table->mediumText('description'); 相当于 MEDIUMTEXT 类型 $table->morphs('taggable'); 加入整数 taggable_id 与字串 taggable_type $table->nullableTimestamps(); 与 timestamps() 相同,但允许 NULL $table->smallInteger('votes'); 相当于 SMALLINT 类型 $table->tinyInteger('numbers'); 相当于 TINYINT 类型 $table->softDeletes(); 加入 deleted_at 字段于软删除使用 $table->string('email'); 相当于 VARCHAR 类型 $table->string('name', 100); 相当于 VARCHAR 类型,并指定长度 $table->text('description'); 相当于 TEXT 类型 $table->time('sunrise'); 相当于 TIME 类型 $table->timestamp('added_on'); 相当于 TIMESTAMP 类型 $table->timestamps(); 加入 created_at 和 updated_at 字段 $table->rememberToken(); 加入 remember_token 使用 VARCHAR(100) NULL ->nullable() 标示此字段允许 NULL ->default($value) 声明此字段的默认值 ->unsigned() 配置整数是无分正负
建立migrate文件的方法
用artisan建立模型时候,会自动建立对应的migrate文件;
可以用artisan命令直接来建立migrate文件:php artisan make:migration create_users_table 可以在后面添加相应的参数php artisan make:migration add_votes_to_users_table --table=users;php artisan make:migration create_users_table --create=users 表示是已经有对应的表 还是新建立的表