当我们开发完成一个(小)项目,发布到线上时,我们需要将本地数据库迁移到服务器上,并且填充初始化数据。而Laravel框架规定了一套完善的数据迁移与填充机制。

在官网中分别介绍了以下四个命令:

php artisan make:migration

php artisan migrate

php artisan make:seeder

php artisan db:seed

分别来创建迁移(migration)和填充器(seeder),并运行。但是,如何创建、编写填充器并不是我们这一节的重点。试问有哪位,会一行一行写代码,编写用于创建表和填充数据的php代码?如果有,只能说,大侠请看下一篇。

写在话题前面,现在我的实验数据库lab中,有一张名为organization的表。实验过程中,都是以这张表

本节的重点,我们着重介绍如何自动生成迁移、运行迁移、自动生成数据填充、运行填充。这个世界上不缺牛人,感谢这些牛B的大侠为我们提供这么多便利的工具。

1、结构迁移

(1) 为了将本地库的数据表结构自动创建为migration文件,我们需要预先安装个库(传送门):

我们不需要自己clone,不需要自己手动配置,只需在项目根目录下运行:

composer require --dev "kitloong/laravel-migrations-generator" -vvv

(2) 导出organiztion表的迁移结构

php artisan migrate:generate organization

导出的迁移结构被存放到了/database/migrations目录下。

(3) 在线上环境导入

将项目/database/migrations传到线上环境中,并运行以下命令:

php artisan migrate --force

命令运行完成后,就会发现,线上数据库中被导入了organization表。同时,数据库中自动创建了migrations表,这张表的作用是登记已经迁移成功的表结构。如果下次想要重新迁移一次,需要清空这张表对应的数据。

到这一步,该迁移的表结构,已经都迁移成功了。接下来,在迁移成功的表结构中,填充初始数据。

2、数据填充

(1) 同样,为了自动将本地数据导出为seeder,我们需要先安装下面的库

composer require "orangehill/iseed" -vvv

在网上很多文章中,还需要进行下面两个步骤,但是在我的版本中是不需要的。这两个步骤记录在此,仅供参考:

在/config/app.php中添加:

'providers' => [
...
Orangehill\Iseed\IseedServiceProvider::class,
],

并执行:

composer dump-autoload

(2) 导出organization表的填充数据

php artisan iseed organization --force

导出的填充数据,会自动放到/database/seeds目录中。

(3) 在线上环境中导入

将/database/seeds下的文件传到线上环境,并运行以下命令:

php artisan db:seed --force

执行完成之后,数据就自动填充进线上数据库中了。

这一篇到这里就结束了,Laravel的外部插件也是相当强大,我们可以合理利用于些外部插件帮助我们开发过程中处理重复繁琐的步骤。好了,我们下一篇再见:)

---------------------------  我是可爱的分割线  ----------------------------

最后博主借地宣传一下,漳州编程小组招新了,这是一个面向漳州青少年信息学/软件设计的学习小组,有意向的同学点击链接,联系我吧。

Laravel入坑指南(9)——数据迁移与填充的更多相关文章

  1. ElasticSearch入坑指南之概述及安装

    ---恢复内容开始--- ElasticSearch入坑指南之概述及安装 了解ElasticSearch ElasticSearch(简称ES)基于Lucene的分布式全文检索引擎.使用ES可以实现近 ...

  2. C语言入坑指南-被遗忘的初始化

    前言 什么是初始化?为什么要初始化?静态变量和局部变量的初始化又有什么区别?实际应用中应该怎么做?本文将一一回答这些问题. 什么是初始化 初始化指的是对数据对象或者变量赋予初始值.例如: int va ...

  3. Elasticsearch入坑指南之RESTful API

    Elasticsearch入坑指南之RESTful API Tags:Elasticsearch ES为开发者提供了非常丰富的基于Http协议的Rest API,通过简单的Rest请求,就可以实现非常 ...

  4. Rust入坑指南:核心概念

    如果说前面的坑我们一直在用小铲子挖的话,那么今天的坑就是用挖掘机挖的. 今天要介绍的是Rust的一个核心概念:Ownership.全文将分为什么是Ownership以及Ownership的传递类型两部 ...

  5. Rust入坑指南:鳞次栉比

    很久没有挖Rust的坑啦,今天来挖一些排列整齐的坑.没错,就是要介绍一些集合类型的数据类型."鳞次栉比"这个标题是不是显得很有文化? 在Rust入坑指南:常规套路一文中我们已经介绍 ...

  6. Rust入坑指南:齐头并进(上)

    我们知道,如今CPU的计算能力已经非常强大,其速度比内存要高出许多个数量级.为了充分利用CPU资源,多数编程语言都提供了并发编程的能力,Rust也不例外. 聊到并发,就离不开多进程和多线程这两个概念. ...

  7. Phalcon如何切换数据库《Phalcon入坑指南系列 三》

    本系列目录 一.Phalcon在Windows上安装 <Phalcon入坑指南系列 一> 二.Phalcon入坑必须知道的功能(项目配置.控制器.模型.增.删.改.查) 三.Phalcon ...

  8. electron入坑指南

    electron入坑指南 简介 electron 实际集成chrome浏览器和node环境, 运行你写的网页 app 基本目录结构 index.html 名称可以不是index, 这个文件与普通网页的 ...

  9. oracle入坑日记<五>数据表

    1   数据表 1.1.数据表是存放数据字段信息的地方:在Oracle,数据表拥有者单位是用户,同时数据表属于表空间.如: 登录my_user用户在orcl表空间下创建的表就是 my_user用户在o ...

  10. laravel基础课程---16、数据迁移(数据库迁移是什么)

    laravel基础课程---16.数据迁移(数据库迁移是什么) 一.总结 一句话总结: 是什么:数据库迁移就像是[数据库的版本控制],可以让你的团队轻松修改并共享应用程序的数据库结构. 使用场景:解决 ...

随机推荐

  1. blackbox的简单学习-监控web服务是否正常以及证书过期时间

    blackbox的简单学习-监控web服务是否正常以及证书过期时间 下载blackbox https://github.com/prometheus/blackbox_exporter 可以在rele ...

  2. [转帖]生产环境 TiDB 集群混合部署实践

    https://tidb.net/book/tidb-monthly/2022/2022-04/usercase/tidb-cluster 一.背景​ 由于各种场外因素导致我们不能自由选择的理想硬件环 ...

  3. [转帖]Jmeter中线程组和setUP线程组、tearDown线程组的区别

    JMETER: setUP线程组:在测试任务ThreadGroup 运行前先被运行.通常用在运行测试任务前,做初始化工作.例如建立数据库连接初始分化工作.用户登录 tearDown线程组:在测试任务线 ...

  4. [转帖]HTTP状态码、请求方法、响应头信息

    https://www.cnblogs.com/pachongshangdexuebi/p/5279608.html HTTP状态码 当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求. ...

  5. [转帖]一张图搞定redis内存优化及配置

    https://www.jianshu.com/p/3195663af83e   Redis内存优化及配置.png Redis优化及配置 Redis所有的数据都在内存中,而内存又是非常宝贵的资源.常用 ...

  6. 【转帖】通过docker配置DNS服务

    https://blog.whsir.com/post-3185.html   在办公室开发人员经常会测试所写的页面,每次都要输入对应的IP地址或者更改hosts,为了让开发大爷省心,不如搭建一个dn ...

  7. 查找linux下面某目录下重名出现的文件以及次数

    find . -name '*.data' -exec basename {} \;| sort | uniq -w32 --all-repeated=separate | uniq -c | sor ...

  8. js中的宏任务和微任务详细讲解

    微任务有哪些 Promise await和async 宏任务有哪些 setTimeout setInterval DOM事件 AJAX请求 看下面的代码 <script> console. ...

  9. 【一个小发现】VictoriaMetrics 中 vmselect 的 `-search.denyPartialResponse` 选项不应该开启

    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 一直以为vmselect 的 -search.denyPa ...

  10. 使用protobuf生成代码import包找不到

    protobuf使用import导入包找不到 前言 解决方案 protobuf使用import导入包找不到 前言 使用protobuf生成go代码,发现protobuf中一个import引用找不到 p ...