Laravel5.1 Migration数据库迁移文件
Migration方便于团队开发,它就像数据库的版本控制一样,它的功能就是可以和别人共享你的数据库结构。这么说可能不太好理解,你跟着敲敲就明白了。
0 前提工作-配置数据库
找到你根目录的 .env 文件配置你的数据库:
DB_HOST=127.0.0.1
DB_DATABASE=learn_laravel
DB_USERNAME=root
DB_PASSWORD=
1 数据表操作
1.1 创建表
使用Laravel后呢 创建一张表的时候就直接生成迁移吧:
php artisan make:migration create_bills_table --create=bills
我们已经创建了迁移文件 然后就可以在里面设计我们的表结构啦:
public function up()
{
Schema::create('bills', function (Blueprint $table) {
$table->increments('id');
$table->string('name'); // 账单名称
$table->string('type'); // 账单类型
$table->timestamps();
});
}
确定没有问题就可以创建这张表了:
php artisan migrate
1.2 重命名表
首先生成一个改表名的迁移文件:
php artisan make:migration rename_bills_to_records --table=billes
其次 用rename方法就可以更改表名啦:
public function up()
{
Schema::rename('bills','records');
}
最后 不要忘了执行迁移:
php artisan migrate
1.3 删除一张表
Schema::drop('bills');
// or
Schema::dropExists('bills');
2 列操作
首先我先列出列都可以是哪些类型:
$table->bigIncrements('id'); |
自增ID,类型为bigint |
$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', ['foo', 'bar']); |
等同于数据库中的 ENUM类型 |
$table->float('amount'); |
等同于数据库中的 FLOAT 类型 |
$table->increments('id'); |
数据库主键自增ID |
$table->integer('votes'); |
等同于数据库中的 INTEGER 类型 |
$table->json('options'); |
等同于数据库中的 JSON 类型 |
$table->jsonb('options'); |
等同于数据库中的 JSONB 类型 |
$table->longText('description'); |
等同于数据库中的 LONGTEXT 类型 |
$table->mediumInteger('numbers'); |
等同于数据库中的 MEDIUMINT类型 |
$table->mediumText('description'); |
等同于数据库中的 MEDIUMTEXT类型 |
$table->morphs('taggable'); |
添加一个 INTEGER类型的 taggable_id 列和一个 STRING类型的 taggable_type 列 |
$table->nullableTimestamps(); |
和 timestamps() 一样但不允许 NULL值. |
$table->rememberToken(); |
添加一个 remember_token 列: VARCHAR(100) NULL. |
$table->smallInteger('votes'); |
等同于数据库中的 SMALLINT 类型 |
$table->softDeletes(); |
新增一个 deleted_at 列 用于软删除. |
$table->string('email'); |
等同于数据库中的 VARCHAR 列 . |
$table->string('name', 100); |
等同于数据库中的 VARCHAR,带一个长度 |
$table->text('description'); |
等同于数据库中的 TEXT 类型 |
$table->time('sunrise'); |
等同于数据库中的 TIME类型 |
$table->tinyInteger('numbers'); |
等同于数据库中的 TINYINT 类型 |
$table->timestamp('added_on'); |
等同于数据库中的 TIMESTAMP 类型 |
$table->timestamps(); |
添加 created_at 和 updated_at 列. |
2.1 向已有数据表中插入若干列数据
比如说 我这次向增加price列 就可以这样命名迁移文件:
php artisan make:migration add_price_intro_records --table=records
之后咱就可以组织迁移架构 增添咱们想要添加的列啦:
public function up()
{
Schema::table('records', function (Blueprint $table) {
$table->integer('price');
});
} /**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('records', function (Blueprint $table) {
$table->dropColumn('price');
});
}
注:不要忘记生成对应down方法的操作。
执行迁移:
php artisan migrate
2.2 在已有的表中修改列
注意:我们修改列之前 必须要引入一个"doctrine/dbal"包 如果没有引入的话 用composer引入一下就可以了。
2.2.1 修改列的一系列属性
我们在之前新增加了一个price列 现在我们来改改它玩儿 首先生成migration:
php artisan make:migration change_price_from_records --table=records
使用change方法来修改某一列:
public function up()
{
Schema::table('records', function (Blueprint $table) {
$table->string('price','50')->nullable()->change();
});
}
之前price是int类型,经过修改 我们把它改为50长度的varchar类型 并且可以为空。
最后 执行迁移:
php artisan migrate
2.2.2 为已存在的列重命名
那个。。。。生成迁移和执行迁移的代码我就不再往上贴了啊,我们直接看代码怎样写吧:
public function up()
{
Schema::table('records', function (Blueprint $table) {
$table->renameColumn('price','quantity');
});
}
2.3 删除列
可以指定删除一个列 也可以是若干个列:
public function up()
{
Schema::table('records', function (Blueprint $table) {
$table->dropColumn('price');
// or
$table->dropColumn(['price,type']);
});
}
2.4 列修改器
修改器的类型有:
->first() |
将该列置为表中第一个列 (仅适用于MySQL) |
->after('column') |
将该列置于另一个列之后 (仅适用于MySQL) |
->nullable() |
允许该列的值为NULL |
->default($value) |
指定列的默认值 |
->unsigned() |
设置 integer 列为 UNSIGNED(无符号的 不能为负数) |
举例:
public function up()
{
Schema::table('records', function (Blueprint $table) {
$table->integer('price')->unsigned();
});
}
2.5 定义索引
索引的类型有:
$table->primary('id'); |
添加主键索引 |
$table->primary(['first', 'last']); |
添加混合索引 |
$table->unique('email'); |
添加唯一索引 |
$table->index('state'); |
添加普通索引 |
举例:
public function up()
{
Schema::table('records', function (Blueprint $table) {
$table->string('email')->unique(); // 邮箱是唯一的
});
}
2.6 删除索引
$table->dropUnique('email');
3 外键关联
创建外键关联很简单:
public function up()
{
Schema::create('records', function (Blueprint $table) {
$table->increments('id');// 当列都声明完后 编写外联:
$table->integer('user_id')->unsigned(); $table->foreign('user_id')->references('id')->on('users');
// or
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
// or
$table->foreign('user_id')->references('id')->on('users')->onUpdate('cascade');
});
}
那么 如何删除一个外键呢?请看下列代码:
$table->dropForeign('records_user_id_foreign');
解读:'records_user_id_foreign' 这个参数是这样拼的:当前表名(records) + 外键名(user_id) + _foreign后缀
Laravel5.1 Migration数据库迁移文件的更多相关文章
- 【6】Laravel5.1的migration数据库迁移
查看Laravel5.1的目录 当你配置好数据库后,在命令行执行下边的操作 php artisan migrate 打开数据库会发现,我们的数据库多了四个表,神奇吧! 打开任意一个migration查 ...
- Laravel 5 数据库迁移文件示例
php artisan make:migration create_stocks_table 在项目根目录执行上面的命令后,会在database/migrations目录下生成2016_06_03_1 ...
- laravel中的数据库迁移
1.创建数据库迁移文件:生成数据库迁移文件,前面跟着时间戳: php artisan make:migration create_posts_table 创建数据库迁移文件:可以重命名数据表名: -- ...
- laravel中数据库迁移的使用:
创建数据库迁移文件: php artisan make:migration create_links_table 创建完表之后,设置字段: public function up() { Schema: ...
- Laravel中如何做数据库迁移
总的来说,做一次独立数据库迁移只需要三步,分别是创建迁移文件.修改迁移文件.运行迁移 1.创建数据库迁移文件php artisan make:migration create_articles_tab ...
- Laravel 6.X 数据库迁移 创建表 与 修改表
数据库迁移创建表 本篇文章中使用的是mysql数据库,其他数据库需要修改env文件和app配置,请其他地方搜索一下就会找到. 创建示例 1.创建users表: 命令行键入 php artisan ma ...
- django中的数据库迁移
Django是用python写的web开发框架,其特点是: 1.重量级框架,内部封装了很多的功能组件,使开发变的简便快速, 2.MVT模式:前后端分离,高内聚低耦合,m:model,与mvc中的m功能 ...
- Flask flask-migrate 数据库迁移
简介 flask-migrate是flask的一个扩展模块,主要是扩展数据库表结构的. 官方文档:http://flask-migrate.readthedocs.io/en/latest/ 使用: ...
- django生成迁移文件和执行迁移的命令
生成迁移文件: python manage.py makemigrations #创建数据库迁移文件 执行迁移: python manage.py migrate # 根据数据库迁移文件生 ...
随机推荐
- Java笔记6:多态
一.多态的分类对象的多态性:动物 x = new 猫();函数的多态性:函数重载.重写 二.多态的体现父类的引用指向了自己的子类对象父类的引用也可以接收自己的对象 三.多态的前提必须是类与类之间只有关 ...
- 怎样优化cocos2d/x程序的内存使用和程序大小
再次感谢原创者:Steffen Itterheim.原创博客原文地址: http://www.learn-cocos2d.com/2012/11/optimize-memory-usage-bundl ...
- 64位系统注冊32位的directshow filter文件
在SERVER2008上注冊自己写的directshow filter 的dll或者ax文件的时候总是提示 [Window Title] RegSvr32 [Content] 模块".\ba ...
- .Net之路(十五)图解LoadRunner压力測试
在项目编码阶段结束后,就须要进行软件測试. 成为软件开发过程中一个不可缺少的环节.而自己主动化測试也是将逐步取代人工繁杂的測试.压力測试就是软件測试对软件性能评估的一个方面,以下就简介我在使用load ...
- SVN环境搭建(2)
原文地址:http://www.penglig.com/post-73.html TortoiseSVN的使用. 首先打开VisualSVN Server Manager,如图: 可以在窗口的右边看到 ...
- 可以打开QQ,但打不开网页的DNS服务器设置问题
方法二: IE->设置->连接->局域网设置
- 开源管理系统OSSIM设置 语言为中文简体
最近研究OSSIM系统,OSSIM的安装是做好的ISO,操作系统选择的是CentOS 64Bit系统.我使用的OSSIM 4.11 的ISO安装,虽然系统说明支持中文,实际上,只是台湾的繁体中文而以. ...
- git服务器gitlab之搭建和使用
git服务器比较有名的是gitosis和gitolite,这两个管理和使用起来稍微有些复杂,没有web页面,而gitlab则是类似于github的一个工具,github无法免费建立私有仓库,并且为了代 ...
- 怎样优雅的研究 RGSS3 番外(一) ruby 实现的后缀自己主动机
*我真的不会 ruby 呀* #encoding:utf-8 #==================================================================== ...
- Angularjs学习笔记8_directive2
指令难点在于参数 angular.module('app', []) .directive('myDirective', function() { return { restrict: String, ...