Laravel 的数据库迁移的方法_php实例

来源:脚本之家  责任编辑:小易  

database migrations 是laravel最强大的功能之一。数bai据库迁移可以理解为数据库的du版本控制器。在 database/migrations 目录中包含两个迁移文zhi件,一个建立用户表,一个用dao于回用户密码重置。在迁移文件中,up 方法用于创建数据答表,down方法用于回滚,也就是删除数据表www.zgxue.com防采集请勿采集本网。

本文介绍了Laravel 的数据库迁移的方法,分享给大家,具体如下:

在我们的开发进度中,Laravel应用程序的数据库架构不断演变:我们在这里添加了一个表,在那里重命名列,删除索引等等。数据库的改变与应用程序代码步调一致。你需要一个复杂的方法来跟踪您的数据库架构

生成迁移

Laravel 怎么生成已有数据库表的对应的文件 migrate(迁移)功能:是一种数据库的版本控制。可以让团队在修改数据库结构的同时,保持彼此的进度一致。迁移通常会和结构生成器一起使用,可以简单的

--table 和 --create 选项可用来指定数据表的名称,或是该迁移被执行时会创建的新数据表。这些选项需在预生成迁移文件时填入指定的数据表:

'default'=>'database' 修改完配置后,我们需要创建一个表来存放队列任务,Laravel5已经在自带artisan命令中内置了一个指令用来生成数据迁移,只需要两条命令即可,当然你得实现配置好数据库连接。

php artisan make:migration create_users_tablephp artisan make:migration create_users_table --create=usersphp artisan make:migration add_votes_to_users_table --table=users

在mysql中创建 laravel数据库 mysql-u root CREATE DATABASE laravel 查看 mysql 配置: 'mysql'=> 'driver'=>'mysql', 'host'=>env('DB_HOST','localhost'), 'database'=>env('DB_DATABASE','forge'), '

添加字段

laravel 操作数据库需要判断是否成功吗 laravel 迁移是一种数据库的版本控制。迁移通常和 结构生成器 配对使用来管理您应用程序的数据库结构。可以支持mysql

\database\migrations\2017_07_30_133748_create_users_table.php

<?phpuse Illuminate\Support\Facades\Schema;use Illuminate\Database\Schema\Blueprint;use Illuminate\Database\Migrations\Migration;class CreateUsersTable extends Migration{ /** * 运行数据库迁移 * * @return void */ public function up() { // Schema::create('users',function (Blueprint $table){ $table->increments('id')->comment('递增ID'); $table->string('email',60)->comment('会员Email'); $table->string('phone',20)->comment('会员手机号'); $table->string('username',60)->comment('用户名'); $table->string('password',32)->comment('用户密码'); $table->char('rank',10)->comment('会员等级'); $table->unsignedSmallInteger('sex')->comment('性别;0保密;1男;2女'); $table->unsignedSmallInteger('status')->comment('用户状态'); $table->ipAddress('last_ip')->default('0.0.0.0')->comment('最后一次登录IP'); $table->timeTz('last_login')->comment('最后一次登录时间'); $table->timestamps(); }); } /** * 回滚数据库迁移 * * @return void */ public function down() { // Schema::drop('users'); }}

要创建一张新的数据表,可以使用 Schema facade 的 create 方法。create 方法接收两个参数:第一个参数为数据表的名称,第二个参数为一个 闭包 ,此闭包会接收一个用于定义新数据表的 Blueprint 对象

你可以方便地使用 hasTable 和 hasColumn 方法来检查数据表或字段是否存在:

if (Schema::hasTable('users')) { //}if (Schema::hasColumn('users', 'email')) { //}

如果你想要在一个非默认的数据库连接中进行数据库结构操作,可以使用 connection 方法:

Schema::connection('foo')->create('users', function (Blueprint $table) { $table->increments('id');});

你可以在数据库结构构造器上设置 engine 属性来设置数据表的存储引擎:

Schema::create('users', function (Blueprint $table) { $table->engine = 'InnoDB'; $table->increments('id');});

重命名与删除数据表

Schema::rename($from, $to);//重命名//删除已存在的数据表Schema::drop('users');Schema::dropIfExists('users');

创建字段

Schema::table('users', function (Blueprint $table) { $table->string('email');});

命令 描述
$table->bigIncrements('id'); 递增 ID(主键),相当于「UNSIGNED 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->dateTimeTz('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', 8, 2); 相当于 FLOAT 型态,总共有 8 位数,在小数点后面有 2 位数。
$table->increments('id'); 递增的 ID (主键),使用相当于「UNSIGNED INTEGER」的型态。
$table->integer('votes'); 相当于 INTEGER 型态。
$table->ipAddress('visitor'); 相当于 IP 地址形态。
$table->json('options'); 相当于 JSON 型态。
$table->jsonb('options'); 相当于 JSONB 型态。
$table->longText('description'); 相当于 LONGTEXT 型态。
$table->macAddress('device'); 相当于 MAC 地址形态。
$table->mediumIncrements('id'); 递增 ID (主键) ,相当于「UNSIGNED MEDIUM INTEGER」型态。
$table->mediumInteger('numbers'); 相当于 MEDIUMINT 型态。
$table->mediumText('description'); 相当于 MEDIUMTEXT 型态。
$table->morphs('taggable'); 加入整数 taggable_id 与字符串 taggable_type。
$table->nullableMorphs('taggable'); 与 morphs() 字段相同,但允许为NULL。
$table->nullableTimestamps(); 与 timestamps() 相同,但允许为 NULL。
$table->rememberToken(); 加入 remember_token 并使用 VARCHAR(100) NULL。
$table->smallIncrements('id'); 递增 ID (主键) ,相当于「UNSIGNED SMALL INTEGER」型态。
$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->timeTz('sunrise'); 相当于 TIME (带时区) 形态。
$table->tinyInteger('numbers'); 相当于 TINYINT 型态。
$table->timestamp('added_on'); 相当于 TIMESTAMP 型态。
$table->timestampTz('added_on'); 相当于 TIMESTAMP (带时区) 形态。
$table->timestamps(); 加入 created_at 和 updated_at 字段。
$table->timestampsTz(); 加入 created_at and updated_at (带时区) 字段,并允许为NULL。
$table->unsignedBigInteger('votes'); 相当于 Unsigned BIGINT 型态。
$table->unsignedInteger('votes'); 相当于 Unsigned INT 型态。
$table->unsignedMediumInteger('votes'); 相当于 Unsigned MEDIUMINT 型态。
$table->unsignedSmallInteger('votes'); 相当于 Unsigned SMALLINT 型态。
$table->unsignedTinyInteger('votes'); 相当于 Unsigned TINYINT 型态。
$table->uuid('id'); 相当于 UUID 型态。

字段修饰

Schema::table('users', function (Blueprint $table) { $table->string('email')->nullable();});

Modifier Description
->after('column') 将此字段放置在其它字段「之后」(仅限 MySQL)
->comment('my comment') 增加注释
->default($value) 为此字段指定「默认」值
->first() 将此字段放置在数据表的「首位」(仅限 MySQL)
->nullable() 此字段允许写入 NULL 值
->storedAs($expression) 创建一个存储的生成字段 (仅限 MySQL)
->unsigned() 设置 integer 字段为 UNSIGNED
->virtualAs($expression) 创建一个虚拟的生成字段 (仅限 MySQL)

字段更新

Schema::table('users', function (Blueprint $table) { $table->string('phone',20)->change(); $table->string('username',60)->->nullable()->change();});

重命名字段

Schema::table('users', function (Blueprint $table) { $table->renameColumn('from', 'to');});

字段移除

Schema::table('users', function (Blueprint $table) { $table->dropColumn(['last_ip', 'last_login']);});

在使用字段更新,重命名字段,字段移除之前,请务必在你的 composer.json文件require键名中添加< "doctrine/dbal": "^2.5">值。然后composer update进行更新或

composer require doctrine/dbal

创建索引

$table->string('email')->unique();

Command Description
$table->primary('id'); 加入主键。
$table->primary(['first', 'last']); 加入复合键。
$table->unique('email'); 加入唯一索引。
$table->unique('state', 'my_index_name'); 自定义索引名称。
$table->unique(['first', 'last']); 加入复合唯一键。
$table->index('state'); 加入基本索引。

开启和关闭外键约束

Schema::enableForeignKeyConstraints();Schema::disableForeignKeyConstraints();

运行迁移

php artisan migrate

在线上环境强制执行迁移

php artisan migrate --force

回滚迁移

若要回滚最后一次迁移,则可以使用 rollback 命令。此命令是对上一次执行的「批量」迁移回滚,其中可能包括多个迁移文件:

php artisan migrate:rollback

在 rollback 命令后加上 step 参数,你可以限制回滚迁移的个数。例如,下面的命令将会回滚最后的 5 个迁移。

php artisan migrate:rollback --step=5

migrate:reset 命令可以回滚应用程序中的所有迁移:

php artisan migrate:reset

使用单个命令来执行回滚或迁移

migrate:refresh 命令不仅会回滚数据库的所有迁移还会接着运行 migrate 命令。所以此命令可以有效的重新创建整个数据库:

php artisan migrate:refresh// 刷新数据库结构并执行数据填充php artisan migrate:refresh --seed

使用 refresh 命令并加上 step 参数,你也可以限制执行回滚和再迁移的个数。比如,下面的命令会回滚并再迁移最后的 5 个迁移:

php artisan migrate:refresh --step=5

无法生成迁移文件

在 Laravel 项目中,由于测试,有时候用 PHP artisan make:migration create_xxx_table 创建数据库迁移。如果把创建的迁移文件 database/migrations/2017_07_30_133748_create_xxx_table.php 文件给删除了,再次执行 php artisan make:migration create_xxx_table 会报错:

复制代码 代码如下:

[ErrorException]                                                                                                                                         

 include(E:\laraver\vendor\composer/../../database/migrations/2017_07_30_133748_create_users_table.php): failed to open stream: No such file or directory 

重新运行 composer update 又可以执行上面的命令了。

Laravel鼓励敏捷、迭代的开发方式,我们没指望在第一次就获得所有正确的。相反,我们编写代码、测试和与我们的最终用户进行交互,并完善我们的理解。对于工作,我们需要一个配套的实践集。我们使用像subversion、GIT或Mercurial这些版本控制工具来存储应用程序的源代码文件,使我们能够撤消错误和追踪开发过程中的改变。但应用程序更改时,存在我们不能单独使用版本控制进行有效管理的区域。在我们的开发进度中,Laravel应用程序的数据库架构不断演变:我们在这里添加了一个表,在那里重命名列,删除索引等等。数据库的改变与应用程序代码步调一致内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • laravel框架数据库迁移操作实例详解
  • laravel5.5 数据库迁移:创建表与修改表示例
  • 关于laravel 数据库迁移中integer类型是无法指定长度的问题
  • laravel实现数据库迁移与支持中文的填充
  • laravel 5框架学习之数据库迁移(migrations)
  • 解决laravel5.x的php artisan migrate数据库迁移创建操作报错sqlstate[42000]
  • 解决tp5在nginx下修改配置访问的问题
  • php 自定义错误处理函数的使用详解
  • 33道php常见面试题及答案
  • thinkphp控制器变量在模板中的显示方法示例
  • php实现redis单据锁以及防止并发重复写入
  • yii框架获取当前controlle和action对应id的方法
  • zend framework教程之mvc框架的controller用法分析
  • php url的pathinfo模式加载不同控制器的简单实现
  • ci框架中类的自动加载问题分析
  • php获取用户真实ip和防刷机制的实例代码
  • Laravel中的数据库迁移是怎么回事??
  • laravel migrate 怎么从已有的数据库中实现迁移
  • laravel 修改了数据库迁移文件,怎么操作才能提交到数据库
  • Laravel 怎么生成已有数据库表的对应的文件
  • laravel数据迁移能不能直接写创建表的sql
  • Laravel 怎么生成已有数据库表的对应的文件
  • Laravel 如何同时使用不同数据库驱动
  • laravel中数据库在哪个文件中配置
  • laravel 操作数据库需要判断是否成功吗
  • 什么是数据库迁移
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全php基础php技巧php实例php文摘php模板首页php编程laravel框架数据库迁移操作实例详解laravel5.5 数据库迁移:创建表与修改表示例关于laravel 数据库迁移中integer类型是无法指定长度的问题laravel实现数据库迁移与支持中文的填充laravel 5框架学习之数据库迁移(migrations)解决laravel5.x的php artisan migrate数据库迁移创建操作报错sqlstate[42000]解决tp5在nginx下修改配置访问的问题php 自定义错误处理函数的使用详解33道php常见面试题及答案thinkphp控制器变量在模板中的显示方法示例php实现redis单据锁以及防止并发重复写入yii框架获取当前controlle和action对应id的方法zend framework教程之mvc框架的controller用法分析php url的pathinfo模式加载不同控制器的简单实现ci框架中类的自动加载问题分析php获取用户真实ip和防刷机制的实例代码php获取数组长度的方法(有实例)微信公众平台实现获取用户openid教你如何使用php session使用php生成二维码的两种方法(带php发送get、post请求的6种方法简php中把stdclass object转array的微信公众平台网页授权获取用户基laravel框架数据库curd操作、连贯php删除数组中空值的方法介绍php从数组中删除元素的四种方法实php使用mysqli同时执行多条sql查询语句的php操作mysqli(示例代码)将php程序中返回的json格式数据用gzip压缩深入浅析php无限极分类的案例教程一段防盗连的php代码tp5 基于bootstrap实现多图上传插件php反序列化长度变化尾部字符串逃逸(0ctftp5框架实现上传多张图片的方法分析zend framework教程之zend_config_xml用法yii2.0整合阿里云oss的示例代码
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved