Laravel入坑指南(9)——数据迁移与填充
当我们开发完成一个(小)项目,发布到线上时,我们需要将本地数据库迁移到服务器上,并且填充初始化数据。而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)——数据迁移与填充的更多相关文章
- ElasticSearch入坑指南之概述及安装
---恢复内容开始--- ElasticSearch入坑指南之概述及安装 了解ElasticSearch ElasticSearch(简称ES)基于Lucene的分布式全文检索引擎.使用ES可以实现近 ...
- C语言入坑指南-被遗忘的初始化
前言 什么是初始化?为什么要初始化?静态变量和局部变量的初始化又有什么区别?实际应用中应该怎么做?本文将一一回答这些问题. 什么是初始化 初始化指的是对数据对象或者变量赋予初始值.例如: int va ...
- Elasticsearch入坑指南之RESTful API
Elasticsearch入坑指南之RESTful API Tags:Elasticsearch ES为开发者提供了非常丰富的基于Http协议的Rest API,通过简单的Rest请求,就可以实现非常 ...
- Rust入坑指南:核心概念
如果说前面的坑我们一直在用小铲子挖的话,那么今天的坑就是用挖掘机挖的. 今天要介绍的是Rust的一个核心概念:Ownership.全文将分为什么是Ownership以及Ownership的传递类型两部 ...
- Rust入坑指南:鳞次栉比
很久没有挖Rust的坑啦,今天来挖一些排列整齐的坑.没错,就是要介绍一些集合类型的数据类型."鳞次栉比"这个标题是不是显得很有文化? 在Rust入坑指南:常规套路一文中我们已经介绍 ...
- Rust入坑指南:齐头并进(上)
我们知道,如今CPU的计算能力已经非常强大,其速度比内存要高出许多个数量级.为了充分利用CPU资源,多数编程语言都提供了并发编程的能力,Rust也不例外. 聊到并发,就离不开多进程和多线程这两个概念. ...
- Phalcon如何切换数据库《Phalcon入坑指南系列 三》
本系列目录 一.Phalcon在Windows上安装 <Phalcon入坑指南系列 一> 二.Phalcon入坑必须知道的功能(项目配置.控制器.模型.增.删.改.查) 三.Phalcon ...
- electron入坑指南
electron入坑指南 简介 electron 实际集成chrome浏览器和node环境, 运行你写的网页 app 基本目录结构 index.html 名称可以不是index, 这个文件与普通网页的 ...
- oracle入坑日记<五>数据表
1 数据表 1.1.数据表是存放数据字段信息的地方:在Oracle,数据表拥有者单位是用户,同时数据表属于表空间.如: 登录my_user用户在orcl表空间下创建的表就是 my_user用户在o ...
- laravel基础课程---16、数据迁移(数据库迁移是什么)
laravel基础课程---16.数据迁移(数据库迁移是什么) 一.总结 一句话总结: 是什么:数据库迁移就像是[数据库的版本控制],可以让你的团队轻松修改并共享应用程序的数据库结构. 使用场景:解决 ...
随机推荐
- Laravel - Eloquent 删除数据
public function ormDelete() { # 1.通过模型删除 // $student = Student::where('id',5 ...
- 一种基于Unix Domain和TCP连接的跨设备多进程间通信的方法
前言: 在linux系统进程间通信的方式有消息,消息队列,管道,内存映射,套接字等多种方式. 在Android系统上进行进程间通信主要是使用Binder,其它的还有共享内存,管道,RPC和Unix ...
- [转帖]Oracle数据库开启NUMA支持
NUMA简介 NUMA(Non Uniform Memory Access Architecture,非统一内存访问)把一台计算机分成多个节点(node),每个节点内部拥有多个CPU,节点内部使用共有 ...
- Clickhouse的极简安装-之二(macos+linux)
Clickhouse的极简安装-之二(macos+linux) StudyFrom https://clickhouse.com/docs/en/install 然后简单的获取方式: curl htt ...
- [转帖]Redis命令详解:Keys
https://jackeyzhe.github.io/2018/09/22/Redis%E5%91%BD%E4%BB%A4%E8%AF%A6%E8%A7%A3%EF%BC%9AKeys/ 介绍完Re ...
- vim 复制代码的方法
之前vim 复制代码 总是格式变错乱了 尤其是yaml文件 有的还带注释 非常痛苦 今天早上查了下 原来处理的方式非常简单 增加一个参数就可以了 方法为 1. vim 打开一个文件 2.输入 :se ...
- Opentelemetry Collector的配置和使用
Collector的配置和使用 目录 Collector的配置和使用 Collector配置 Receivers Processors Exporters Service Extensions 使用环 ...
- 在WPF应用中,结合阿里矢量图标库使用Geometry图标
在我们的SqlSugar开发框架的WPF应端中,有时候我们需要在按钮或者其他界面元素上使用一些图标,框架中我们可以使用 lepoco/wpfui 项目的图标库,也可以使用Font-Awesome-WP ...
- vue3中markRaw的使用
markRaw 作用:将一个对象标记为不可以被转化为代理对象.返回该对象本身. 应用场景: 1.有些值不应被设置成响应式时,例如复杂的第三方类库等 2.当渲染具有不可变数据源的大列表时,跳过响应式转换 ...
- vue中使用refs出现undefined的解决方法
最近遇见一个情况, 在methods:{}中的某个方法, 通过父组件去调用子组件的一个方法:this.$refs.xxx 打印出来的却是undefined? 因为: 是如果在DOM结构中的某个DOM节 ...