Laravel数据库迁移
Laravel的数据迁移功能很好用,并且可以带来一系列好处。
通过几条简单的 artisan 命令,就可以顺利上手,没有复杂的地方
注意:该系列命令对数据库非常危险,请准备一个单独的数据库作为配套练习,假设你已经新建了一个空的数据库
首先新建一个迁移表文件,比如test表
php artisan make:migration CreateTestTable (文件名格式并没有要求)
这个时候项目中生成了一个新的迁移文件,在 project/database/migrations/ 目录下
打开这个文件,编辑表结构
public function up()
{
Schema::create('test', function (Blueprint $table) {
$table->increments('id');
$table->string('name',30);
$table->integer('sex');
$table->timestamps();
});
}
这个时候数据库应该还是空的,没有任何表,这个时候执行:
php artisan migrate:fresh
现在数据库里面多了一张test表了,然后在打开迁移文件,增加字段或者删除字段等修改,再次执行上面的命令,数据库的test表被刷新了。
到此Laravel的数据库迁移就已经完了。
但是通常还有一个功能和数据库迁移经常同事存在,为了方便调试我们通常要往数据库里面填充一些数据,就是数据填充。
php artisan make:seed TestSeeder
这个时候项目中生成了一个新的seeder文件,在 project/database/seeds/ 目录下
打开并编辑里面的run方法:
public function run()
{
\Illuminate\Support\Facades\DB::table('test')
->insert([
'name' => '张三' . str_random(),
'sex' => rand(0,1)
]);
}
打开seeds目录下自带的 DatabaseSeeder.php 文件,编辑run方法
public function run()
{
$this->call(TestSeeder::class);
}
然后执行 php artisan db:seed
这个时候 test 表会增加一条数据,如果要一次批量增加更过数据可以这样:
public function run()
{
for ($i = 0; $i < 100; $i++) {
$this->call(TestSeeder::class);
}
}
这种数据填充的方式不是很优雅,我们换一种更好的方式来实现数据填充
新建一个 Test 模型: php artisan make:model Test
这个时候项目中生成了一个新的Model文件,在 project/app/ 目录下
打开文件添加一个属性 protected $table = 'test'; (绑定表)
在创建一个模型工厂: php artisan make:factory TestFactory
这个时候项目中生成了一个新的Factory文件,在 project/database/factories/ 目录下,打开并编辑:
$factory->define(\App\Test::class, function (Faker $faker) {
return [
'name' => $faker->name,
'sex' => $faker->biasedNumberBetween(0,1)
];
});
重新打开并编辑对应的Seeder文件:TestSeeder.php
public function run()
{
factory(\App\Test::class,50)->create();
// \Illuminate\Support\Facades\DB::table('test')
// ->insert([
// 'name' => '张三' . str_random(),
// 'sex' => rand(0,1)
// ]);
}
再次执行: php artisan db:seed ,这个时候数据库一次多了50条数据
常用命令组合
php artisan migrate:fresh --seed (重建数据表结构并执行数据填充)
其他
对于老项目想要快速介入 Laravel的数据迁移,一个表一个表的去建 Migrate显然是很累的,github上有一个将根据表自动生成migrate的库可供参考:
https://github.com/Xethron/migrations-generator
注意: 最近发现这个库还有有一些问题,生成迁移文件后还是挨个检查一下,在本地运行看看结果
Laravel数据库迁移的更多相关文章
- laravel数据库迁移(三)
laravel号称世界上最好的框架,数据库迁移算上一个,在这里先简单入个门: laravel很强大,它把表中的操作写成了migrations迁移文件,然后可以直接通过迁移文件来操作表.所以 , 数据迁 ...
- laravel数据库——迁移
1.简介 迁移就像数据库的版本控制,允许团队简单轻松的编辑并共享应用的数据库表结构,迁移通常和Laravel的结构构建器结对从而可以很容易地构建应用的数据库表结构. Laravel的Schema门面提 ...
- laravel 数据库迁移转 sql 语句
可以使用下面的命令 php artisan migrate --pretend --no-ansi 当然,你需要有可以 migrate 的东西. 数据库迁移导出到文件(使用命令) <?php n ...
- laravel 数据库迁移
问题:之前有创建迁移文件 并且执行过 如果删除迁移文件 再重新创建迁移文件时就有问题 提示找不到之前的迁移文件 /** 一开始执行的命令 php artisan make:migration crea ...
- laravel数据库迁移的migrate小解
当通过命令行:php artisan migrate:make create_authors_table --table=authors --create时,在 migration.php 中若Sch ...
- laravel数据库迁移 和 路由防攻击
命令:php artisan migrate 防攻击:
- 转: Laravel的数据库迁移 介绍的比较清晰
原文: https://blog.sbot.io/articles/12/Laravel-数据库迁移(Database-Migrations)操作实例 很多人可能在学习Laravel框架的时候,对La ...
- Laravel学习笔记(四)数据库 数据库迁移案例
创建迁移 首先,让我们创建一个MySql数据库“Laravel_db”.接下来打开app/config目录下的database.php文件.请确保default键值是mysql: return arr ...
- Laravel学习笔记(三)数据库 数据库迁移
该章节内容翻译自<Database Migration using Laravel>,一切版权为原作者. 原作者:Stable Host, LLC 翻译作者:Bowen Huang 正文: ...
随机推荐
- Linux文本三剑客超详细教程---grep、sed、awk
awk.grep.sed是linux操作文本的三大利器,合称文本三剑客,也是必须掌握的linux命令之一.三者的功能都是处理文本,但侧重点各不相同,其中属awk功能最强大,但也最复杂.grep更适合单 ...
- Flutter 即学即用系列博客——10 混淆
前言 之前的博客我们都是在 debug 的模式下进行开发的. 实际发布到市场或者给到用户的都是 release 包. 而对于 Android 来说,release 包一个重要的步骤就是混淆. Andr ...
- J2SE学习历程
2014/12/09 1.+两边有字符串的话,则另外的先转换为字符串再连接. int c = 12; System.out.println(“c=” + c); 2.如果a=2,b=a++,先赋值再运 ...
- 杭电ACM2019--数列有序!
数列有序! Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- wordpress常用函数及使用位置
single 页面: 摘要内容:the_excerpt():如果摘要空,摘取正文内容:需要在循环中使用 获取当下页面的分类:wp_get_post_terms( int $post_id, strin ...
- Odoo 强大的开源微信模块 oejia_wx
详见:http://oejia.net/blog/2018/10/24/oejia_wx_v054.html oejia_wx Odoo 的微信模块,提供了对微信公众号.企业号(企业微信)及小程序的接 ...
- 两种方法实现asp.net方案的前后端数据交互(aspx文件、html+ashx+ajax)
一个HTML页面只能显示HTML代码信息,不能与数据库进行数据的交互.asp.net方案提供了网页与数据库交互的方法,这里举出两种:①aspx文件 ②ashx文件+ajax技术 一.创建数据库 这里以 ...
- jQueryMobile 網頁使用 ASP.NET Web API 服務
微軟的 ASP.NET Web API 框架,能以 RESTful 輕量級的架構風格,建立 HTTP 服務,讓多種不同的用戶端,如: 手機.平板.電腦(PC),透過 HTTP 的 GET.POST.P ...
- socket字符流循环截取
场景:socket 客户端将一个单向链表序列化后发送给服务端,服务端将之解析,重新构建单向链表. Client.cpp //遍历链表,填充到缓冲区 ]) { ListNode* tmp = p; // ...
- (办公)springmvc->controller的统一异常层,返回json
controller里面写的代码,很多时候,没有写try{}catch(Exceiption ex){},结果就是系统出错,就算是接口,参数正确也会返回404,这个是不应该的. 下面是代码,以后参考 ...