seed可以开发测试环境添加假数据, 而migrate功能可以在生产环境填充真实, 或曰原始数据,
$categories = [ [ 'name' => '分享', 'description' => '分享创造,分享发现', ], [ 'name' => '教程', 'description' => '开发技巧、推荐扩展包等', ], [ 'name' => '问答', 'description' => '请保持友善,互帮互助', ], [ 'name' => '公告', 'description' => '站点公告', ], ]; //这里发现可以直接操作数据库的东西了, 有点儿接近sql了. DB::table('categories')->insert($categories);
写在migrate的文件里面, up方法, 然后直接php artisan:migrate, 就能把旧的migrate自己完成了了, 有新的migrate, 就用
$ php artisan make:migration seed_categories_data
生成migrate文件.
代码生成器
啥? 机器人都会写代码了? 很有可能的事, 现在编程都傻瓜化了..
问题是, 如果快速写出符合代码规范的代码, 除了机器人, 还能有谁? 有个好东西叫summerblue/generator.
$ composer require "summerblue/generator:~1.0" --dev
--dev表示仅在开发环境使用.
首先, 整理一下需要新建的模型对象吧, 例如:
字段名称 描述 字段类型 加索引缘由 其他
title 帖子标题 字符串(String) 文章搜索 无
body 帖子内容 文本(text) 不需要 无
user_id 用户 ID 整数(int) 数据关联 unsigned()
category_id 分类 ID 整数(int) 数据关联 unsigned()
reply_count 回复数量 整数(int) 文章回复数量排序 unsigned(), default(0)
view_count 查看总数 整数(int) 文章查看数量排序 unsigned(), default(0)
last_reply_user_id 最后回复的用户 ID 整数(int) 数据关联 unsigned(), default(0)
order 可用来做排序使用 整数(int) 不需要 default(0)
excerpt 文章摘要,SEO 优化时使用 文本(text) 不需要 nullable()
slug SEO 友好的 URI 字符串(String) 不需要 nullable()
只有下面一行, 就把view, controller, 数据库全搞定.
$ php artisan make:scaffold Topic --schema="title:string:index,body:text,user_id:integer:unsigned:index,category_id:integer:unsigned:index,reply_count:integer:unsigned:default(0),view_count:integer:unsigned:default(0),last_reply_user_id:integer:unsigned:default(0),order:integer:unsigned:default(0),excerpt:text:nullable,slug:string:nullable"
接着就是填充10个User跟100个Topics的假数据进去.方便测试分页功能.
填充数据需要4个文件:
1. 模型, 比如User.php 已经有了
2. 数据工厂, database/factories/UserFactory.php
数据工厂里面使用了一个以Faker作为输入的闭包, 这个闭包里面有假数据的产生方法, 由于要增加introduction字段的填充, 用Faker的sentence方法, 随机产生一些小文本, 作为instroduction即可
然后用命令产生数据填充文件:
$ php artisan make:seed UsersTableSeeder
3. 用户的数据填充, database/seeds/UsersTableSeeder.php
这个seed里面定义了要生成10个数据, 以及第一个数据要特殊化处理, 因为是管理员
4. 注册数据填充, database/seeds/DatabaseSeeder.php
理论上可以同时生成多种模型数据, 目前就先生成User先.
public function run() { $this->call(UsersTableSeeder::class); //$this->call(TopicsTableSeeder::class); }
开始造假:
$ php artisan db:seed
接着topics的填充也是一样, 模型, 数据工厂, 填充规则, 调用四步四个文件.
然后重新填充即可:
$ php artisan migrate:refresh --seed