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数据库迁移文件的更多相关文章

  1. 【6】Laravel5.1的migration数据库迁移

    查看Laravel5.1的目录 当你配置好数据库后,在命令行执行下边的操作 php artisan migrate 打开数据库会发现,我们的数据库多了四个表,神奇吧! 打开任意一个migration查 ...

  2. Laravel 5 数据库迁移文件示例

    php artisan make:migration create_stocks_table 在项目根目录执行上面的命令后,会在database/migrations目录下生成2016_06_03_1 ...

  3. laravel中的数据库迁移

    1.创建数据库迁移文件:生成数据库迁移文件,前面跟着时间戳: php artisan make:migration create_posts_table 创建数据库迁移文件:可以重命名数据表名: -- ...

  4. laravel中数据库迁移的使用:

    创建数据库迁移文件: php artisan make:migration create_links_table 创建完表之后,设置字段: public function up() { Schema: ...

  5. Laravel中如何做数据库迁移

    总的来说,做一次独立数据库迁移只需要三步,分别是创建迁移文件.修改迁移文件.运行迁移 1.创建数据库迁移文件php artisan make:migration create_articles_tab ...

  6. Laravel 6.X 数据库迁移 创建表 与 修改表

    数据库迁移创建表 本篇文章中使用的是mysql数据库,其他数据库需要修改env文件和app配置,请其他地方搜索一下就会找到. 创建示例 1.创建users表: 命令行键入 php artisan ma ...

  7. django中的数据库迁移

    Django是用python写的web开发框架,其特点是: 1.重量级框架,内部封装了很多的功能组件,使开发变的简便快速, 2.MVT模式:前后端分离,高内聚低耦合,m:model,与mvc中的m功能 ...

  8. Flask flask-migrate 数据库迁移

    简介 flask-migrate是flask的一个扩展模块,主要是扩展数据库表结构的. 官方文档:http://flask-migrate.readthedocs.io/en/latest/ 使用: ...

  9. django生成迁移文件和执行迁移的命令

    生成迁移文件: python manage.py makemigrations    #创建数据库迁移文件 执行迁移: python manage.py migrate    # 根据数据库迁移文件生 ...

随机推荐

  1. C++发送HTTP请求---亲测可行(转)

    转自:http://hi.baidu.com/benbearlove/item/1671c23017575825b3c0c53f 环境:xp sp3,vs2008,在静态库中使用 MFC #inclu ...

  2. android应用开发-从设计到实现 2-8 组件与经常使用模式

    组件与经常使用模式 前面已经比較全面的介绍了Material Design相关的设计哲学.设计原理和方法论. 这一章開始,我们将看看这些原理是怎样在安卓系统其中得到实践的. 一个应用并非全然从什么都没 ...

  3. Scala快学笔记(一)

    一,基本概念: 1,Scala是一种基于JVM的面向对象和函数式编程语言 2,基本类型:数值类型 ->:Byte,Short,Int,Long,Float,Double和布尔类型:Boolean ...

  4. 【OpenStack 虚拟机初始化user-data & Cloud-init】

    示例: import httplib import json import base64 tenant_id='xxx' token='xxx' compute_host="xxx" ...

  5. windows下curl报错:curl : (1) Protocol https not supported or disabled in libcurl

    如果命令语句中有单引号,改为英文双引号试一下

  6. lodash 类型判断

    1.isArray _.isArray(value) 检查 value 是否是 Array 类对象. 2.isElement _.isElement(value) 检查 value 是否是可能是 DO ...

  7. Openfiler 之Linux 安装ISCSI initiator和自动挂载

    OPENFILER做TARGET,RED HAT做客户端,如果默认没有安装ISCSI initiator的话,可以在光盘上找到RPM包直接安装.service iscsi start,启动服务,ser ...

  8. 【DB2】SQL0501N FETCH 语句或 CLOSE 语句中指定的游标尚未打开,或者游标标量函数引用中的游标变量尚未打开。 SQLSTATE=24501

    在DB2中建立存储过程时使用了隐式游标,在调用的时候报错如下: SQL0501N  FETCH 语句或 CLOSE 语句中指定的游标尚未打开,或者游标标量函数引用中的游标变量尚未打开.  SQLSTA ...

  9. hdu1010 dfs+路径剪枝

    题意:用一个案例来解释 4 4 5 S.X. ..X. ..XD .... 在这个案例中,是一个4*4的地图. . 表示可走的地方, X 表示不可走的地方,S表示起始点,D表示目标点.没走到一个点之后 ...

  10. 使用 Visual Studio 2012进行C语言开发

    1.打开visual studio,选择菜单[文件]->[新建]->[项目],将会弹出新建项目对话框 2.在弹出的新建项目对话框中,选择和填补相应的属性. 3.点击确定之后,会跟着弹出应用 ...