Laravel中数据迁移与数据填充的详细步骤

这是一篇基础教程,对标 Laravel 文档中的数据迁移数据填充,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍把。

关于Laravel数据库迁移的理解

最初看到laravel框架中迁移的时候,会以为这个迁移是把数据从一个数据库中迁到另一个数据库中,又或者是从一个服务器迁移到另一个服务器中。我自己学习有一个学习方法叫做顾名思义,所以所述是我的第一反应,但是学了以后发现这个迁移不是我理解中的迁移,但又不知道为什么叫做迁移,所以去百科查了一下。

迁移是指已经获得的知识、技能,甚至方法和态度对学习新知识、新技能的影响。这种影响可能是积极的,也可能是消极的,前者叫正迁移或简称迁移,后者叫负迁移或干扰。迁移首先是使习得的经验得以概括化、系统化,形成一种稳定的整合的心理结构,从而更好地调节人的行为,并能动地作用于客观世界。迁移是向能力转化的关键。能力的形成一方面依赖于知识、技能的掌握;另一方面也依赖于所掌握知识和技能的不断概括化、系统化。——引用于360百科

看完上面的百科说明,其实才明白什么叫做数据库迁移,总结一下,迁移是指某种影响,所以数据库迁移是通过对迁移文件的修改对数据库造成的影响,这种影响其实就是操作数据库。

换句通俗的话说,是在laravel中有一个文件,这个文件中写了laravel本身内置的对数据库的“命令“,例如可以创建修改删除库、表、字段。通过这些文件中的代码,便可以通过版本控制达到控制数据库的目的,至于如何通过文件操作数据库,我们可以看文档中的具体说明。

migration

Laravel 中提供了数据库迁移的方式来管理数据库,想象一个场景:在一个多人开发的项目中,你的同事修改了某个数据库结构并修改了代码,通过 git 你可以即时的同步同事修改的代码,但是数据库结构,你只能通过手工的方式来复制同事修改的 SQL 语句,执行以保证数据库的结构一致。那么,Laravel 中的数据库迁移概念,就是用于解决团队中保证数据库结构一致的方案。

migration 使用非常简单,编写一定的 php 代码并执行,那么 Laravel 就会自动的更新数据库。假设你的同事要修改数据库某个字段,那么只要编写 php 代码,接着你通过 git 更新了代码,执行 migrate 操作之后,你的数据库结构就和他的同步了。下面我们就来看具体的使用方法。

migrate

Laravel 把编写数据库改动的 php 代码称为迁移,可以通过 php artisan make:migration filename 的方式来创建迁移文件。假设你需要创建一张新的 user 表,那么你可以通过执行 php artisan make:migration create_user_table --create=user 来创建一个迁移文件,执行命令会在 database/migrations/ 目录下建立一个 文件创建时间_filename 的 php 文件,那么这个文件就是我们接下来用来编写数据库结构变化的文件了。这里要提一点,虽然说创建迁移文件的名称可以随意,但是为了管理方便,最好文件名可以体现要执行的数据库操作,比如这里我们要创建一张 user 表,所以文件名称为 create_user_table。

php artisan make:migration filename 有两个可选参数

--create=tablename 表明该迁移是用来创建表。

--table=tablename 表明该迁移是用来对 tablename 这张表进行操作。

我们创建出来的迁移文件 create_user_table 会包含两个方法。

public function up() { Schema::create('user', function (Blueprint $table) { $table->increments('id'); $table->timestamps(); }); } public function down() { Schema::dropIfExists('user'); }

这两个方法是互逆的操作,比如我们可以再 up 方法中编写我们要创建的 user 表的相关信息,而 down 方法中则是删除 user 表的操作。这样,我们就可以做到回滚操作,当我们创建 user 表之后发现某个字段名写错了,就可以通过 down 来删除 user 表,进而重新建立 user 表。

假设 user 表有 id,username,email 三个字段,那么可以再 up 方法中写

public function up() { Schema::create('user', function (Blueprint $table) { $table->increments('id')->index()->comment('用户id'); $table->string('name')->default('')->comment('用户名'); $table->string('email')->nullable()->comment('用户邮箱'); $table->timestamps(); }); }

一般,我们的逻辑会在闭包函数中写。上面的代码,即时不能完全明白,也可以大概猜出以下几点:

我们操作的表是 user 表。

user 表中定义了 id 字段,因为调用了 increments 方法,所以 id 为 auto_increment,调用了 index 方法说明给 id 添加了索引,最后 comment 等同于注释。

有了 id 的经验,那么 name 字段也很好理解了,string 方法说明 name 是 varchar/char    类型的,default 定义了 name 字段的默认值。

email 字段 调用了 nullable 方法说明运行 email 字段为空。

定义字段结构的时候可以使用链式调用的方式。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/f31811d96d1f45e235926f6cf059879a.html