Laravel SQL migration
结合 Laravel 的 Schema 构建器构建应用的数据库表结构,类似于数据库的版本控制,允许团队成员间编辑并共享应用的数据库表结构
Laravel 的 Schema 门面提供了与数据库系统无关的创建和操纵表的支持,在 Laravel 所支持的所有数据库系统中提供一致的、优雅的、流式的 API,将 SQL 转成 PHP 去执行
部署环境(WAMP)
php 7.3.1
composer 1.8.4
laravel 5.8.0
MySQL 5.7.24
迁移步骤
- MySQL 数据库创建 Database
- 到 laravel 目录下修改
.env
文件符合数据库配置
DB_CONNECTION=mysql |
- 到 laravel 目录创建新的迁移
php artisan make:migration create_table_name
创建的数据表在laravel\database\migration
目录下
--table
和--create
选项可以用于指定表名以及该迁移是否要创建一个新的数据表。这些选项只需要简单放在上述迁移命令后面并指定表名php artisan make:migration create_users_table --create=users
php artisan make:migration add_votes_to_users_table --table=users
编写迁移数据表
迁移类包含了两个方法:up
和down
。up
方法用于新增表,列或者索引到数据库,而down
方法就是up
方法的反操作
用到 Laravel 的schema
构建器来创建和修改表,后面给出具体实现方法运行迁移表到数据库
php artisan migrate
强制运行这些命令而不被提示,可以使用—force(不推荐)php artisan migrate --force
在 MySQL 中可以看到 Database 下有新的表
- 执行回滚
在 Database 下有 migration 表,使得 laravel 可以回滚
执行文件中的public function down()
,回滚最后一批运行的迁移php artisan migrate:rollback
回滚所有的应用迁移php artisan migrate:reset
先回滚所有数据库迁移php artisan migrate:refresh
回滚或重建指定数量的迁移,refresh 命令提供的 step 选项php artisan migrate:refresh --step=5
- 在迁移之前进行试验
php artisan migrate --pretend
创建表
使用 Schema 门面上的 create 方法来创建新的数据表。create 方法接收两个参数,第一个是表名,第二个是获取用于定义新表的 Blueprint 对象的闭包Schema::create('table_name', function (Blueprint $table){ })
创建表中的列
在 Schema 中创建表中的列结构 $table->类型('名称');
- 常用属性
$table->bigIncrements('id'); //自增ID,类型为bigint |
- 常用约束
->after('column') //将该列置于另一个列之后 (仅适用于MySQL) |
- 格式示例
class CreateTableName extends Migration |
修改、重命名、删除列
->change()
方法允许你修改已存在的列为新的类型,或者修改列的属性->renameColumn()
方法可以重命名一个列->dropColumn
方法可以删除列
Schema::table('users', function ($table) { |
- 需要添加 doctrine/dbal 依赖到 composer.json 文件
- 暂不支持 enum 类型的列的修改和重命名
添加索引键
$table->primary('id'); //添加主键索引 |
删除索引
$table->dropPrimary(' '); //删除主键索引 |
外键约束(loading…)
检查列表是否存在
使用 hasTable
和 hasColumn
方法检查表或列是否存在
if (Schema::hasTable('users')) { |
设置表的存储引擎,在 schema 构建器上设置 engine 属性
Schema::create('users', function ($table) { |
重命名/删除表
在public function up()
中添加Schema::rename('your_table_name','change_name');
更新public function down()
中的表名
在public function down()
中添加Schema::drop('users');
或 Schema::dropIfExists('users');
用于迁移的回滚
- 本文链接:https://hyqskevin.github.io/2019/02/27/migration/
- 版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 CN 许可协议。转载请注明出处!