laravel迁移相关的笔记

项目中一直没有使用迁移,因为就我一个(中间来了一个,又走了...),嫌麻烦,今天打算用用迁移,看了下文档:
    http://laravelacademy.org/post/2965.html

对文档中的字段的一些操作,简单过了一遍,记录下:
    /*
        表引擎
     */
    $table->engine = 'InnoDB';

    /*
        类类型
     */

    // - 数字
    $table->bigInteger('id');
    $table->integer('id');
    $table->mediumInteger('id');
    $table->smallInteger('id');
    $table->tinyInteger('id');
    // -
    $table->decimal('balance', 15, 8);
    $table->float('balance');
    $table->double('balance', 15, 8);
    $table->real('balance');

    // - 时间
    $table->date('created_at');
    $table->dateTime('created_at');
    $table->timeStamp('created_at'); 
    $table->time('sunrise'); 

    // - 字符串
    $table->char('name', 4);
    // 等同于 VARCHAR
    $table->string('name'); 
    // 等同于 VARCHAR(100)
    $table->string('name', 100); 
    $table->text('description'); 
    $table->mediumText('description');
    $table->longText('description');
    // 等同于 BLOB
    $table->binary('data');
    // -
    $table->enum('choices', ['foo', 'bar']);
    // - 
    $table->boolean('confirmed');
    // - 这3个没见过
    $table->json('options');    // 等同于数据库中的 JSON 类型
    $table->jsonb('options');   // 等同于数据库中的 JSONB 类型
    $table->uuid('id');         // 等同于数据库的UUID


    // 扩展,与laravel系统结合,方便操作

    // 自增ID,类型为 bigint
    $table->bigIncrements('id');    
    // 自增ID,类型为 int
    $table->increments('id');    
    // 添加一个 INTEGER类型的 taggable_id 列和一个 STRING类型的 taggable_type列
    $table->morphs('taggable');
    // 和 timestamps() 一样,但允许 NULL 值
    $table->nullableTimestamps('created_at');
    // 添加一个 'remember_token' 列:VARCHAR(100) NULL
    $table->rememberToken();
    // 添加 'created_at' 和 'updated_at'
    $table->timeStamps(); 
    // 新增一个 'deleted_at' 列,用于 '软删除'
    $table->softDeletes();

    /*
        列修改器
     */
    ->first();  // 将列置于表第一个列(仅限于MYSQL)
    ->after('列名');  // 将列置于某一列后(仅限于MYSQL)
    ->nullable();   // 允许列为NULL
    ->defalut($value);  // 指定列默认值
    ->unsigned();   // 设置整型列为 UNSIGNED

    /*
        修改列
            需安装 doctrine/dbal,composer require doctrine/dbal
     */
    // change() - 修改列
    $table->string('name', 30)->nullable()->change();
    // renameColumn() - 重命名列
    $table->renameColumn('name', 'title');

    /*
        删除列
            需安装 doctrine/dbal,composer require doctrine/dbal
     */
    // 删除单个列
    $table->dropColumn('name');
    // 删除多个列
    $table->dropColumn(['name', 'age']);

    /*
        创建索引
            每种索引,都有3种方式:
            一个string参数
            一个array参数 - 组合索引
            2个参数 - 允许自定义索引名
        注意:
            laravel自动分配的索引名:
                表名_列名_索引类型:users_mobile_unique  // users表的mobile字段为unique索引
     */
    $table->primary('id');      // 主键索引
    $table->primary(['first', 'last']);     // 混合索引(这个不太清楚)
    $table->primary('first', 'first_primary_index']);     // 自定义索引名
    $table->unique('mobile');   // 唯一索引
    $table->index('state');            // 普通索引

    /*
        删除索引
     */
    $table->dropPrimary('索引名')
    $table->dropUnique('索引名')
    $table->dropIndex('索引名')

    /*
        外键约束
        注意:
            laravel自动分配的外键名:
                表名_列名_foreign:posts_user_id_foreign  // posts表的user_id字段添加foreign
     */
    // 添加外键,当前表的user_id,外键关联users表的id列
    $table->foreign('user_id')->references('id')->on('users');
    // 约束 'on delete' 和 'on update' 时,才关联外键
    $table->foreign('user_id')->references('id')->on('users')->onDelete;
    // 删除外键
    $table->dropForeign('posts_user_id_foreign');


结语(我使用的是MySQL数据库):
    纯粹是按照文档写的过了一遍,有几点记录下:
    1.里面有 'json' 类型,MySQL5.7支持
    2.里面不少类型,可能MySQL没有的(只是变体而已),而且MySQL有的,laravel也并未都实现了。而且有的和MySQL是不一致的,例如:
        boolean 类型 --> 源码中其实是 tinyint(1)
        float类型,其实使用的是 double 类型
    3.源码目录:
        vendor/laravel/framework/src/Illuminate/Database/Schema
        可以看看
    4.可能没有我们原生的那么全,但基本常用的都有了
    5.MySQL的列修改器:
        'VirtualAs', 'StoredAs', 'Unsigned', 'Charset', 'Collate', 'Nullable', 'Default', 'Increment', 'Comment', 'After', 'First',
       首字母小写 
    6.  
        $table->uuid() - 添加字段 'char(36)'
        $table->ipAddress() - 添加字段 'varchar(45)'
        $table->macAddress() - 添加字段 'varchar(17)'
    7.安装 laravel-schema-extend 扩展
        支持 '表扩展' 和 'int/tinyint/mediumint/smallint/bigint' 的长度



补充:
    很多时候我们需要只运行单个文件的迁移,然后laravel并未提供。查看了下源码,是支持迁移某个目录下的所有文件(使用 '--path' 选项) 
    所以,我们可以在我们项目中,来进行扩展:
        1.在 'database/migrations/' 创建 'single/' 目录
        2.将我们想单独执行迁移的文件,复制到 'single/' 目录下
        3.执行命令:
            php artisan migrate --path=/database/migrations/single




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值