内容简介:Laravel 使用填充类提供了一个简单方法来填充测试数据到数据库。所有的填充类都位于要生成一个填充器,可以通过Artisan 命令一个填充器类默认只包含一个方法:
简介
Laravel 使用填充类提供了一个简单方法来填充测试数据到数据库。所有的填充类都位于 database/seeds
目录。填充类的类名完全由你自定义,但最好还是遵循一定的规则,例如 UsersTableSeeder
等。安装完 Laravel 后,默认会提供一个 DatabaseSeeder
示例类。从这个类中,你可以使用 call
方法来运行其他填充类,从而允许你控制填充顺序。
编写填充器
要生成一个填充器,可以通过Artisan 命令 make:seeder
。所有框架生成的填充器都位于 database/seeds
目录:
php artisan make:seeder UsersTableSeeder
一个填充器类默认只包含一个方法: run
。当 Artisan 命令 db:seed
运行时该方法被调用。在 run
方法中,可以插入任何你想插入数据库的数据,你可以使用查询构建器手动插入数据,也可以使用Eloquent 模型工厂(后面数据库测试部分文档会详述这个概念)。
注:数据库填充期间模型批量赋值(后面 Eloquent ORM 中会详述这个概念)自动被禁止。
举个例子,让我们修改 Laravel 安装时自带的 DatabaseSeeder
类,添加一个数据库插入语句到 run
方法:
<?php
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
class DatabaseSeeder extends Seeder
{
/**
* 运行数据库填充
*
* @return void
*/
public function run()
{
DB::table('users')->insert([
'name' => str_random(10),
'email' => str_random(10).'@gmail.com',
'password' => bcrypt('secret'),
]);
}
}
使用模型工厂
当然,手动指定每一个模型填充的属性是很笨重累赘的,取而代之的,我们可以使用模型工厂来快速生成大量的数据库记录。首先,查看模型工厂文档来学习如何定义工厂,定义完工厂后,可以使用辅助函数 factory
来插入记录到数据库。
举个例子,让我们创建 50 个用户并添加关联关系到每个用户:
/**
* 运行数据库填充
*
* @return void
*/
public function run(){
factory(App\User::class, 50)->create()->each(function($u) {
$u->posts()->save(factory(App\Post::class)->make());
});
}
调用其他填充器
在 DatabaseSeeder
类中,你可以使用 call
方法执行其他填充类,使用 call
方法允许你将数据库填充分解成多个文件,这样单个填充器类就不会变得无比巨大,只需简单将你想要运行的填充器类名传递过去即可:
/**
* 运行数据库填充
*
* @return void
*/
public function run(){
$this->call(UsersTableSeeder::class);
$this->call(PostsTableSeeder::class);
$this->call(CommentsTableSeeder::class);
}
运行填充器
编写好填充器类之后,需要通过 dump-autoload
命令重新生成 Composer 的自动加载器:
composer dump-autoload
运行之后可以使用 Artisan 命令 db:seed
来填充数据库。默认情况下, db:seed
命令运行 DatabaseSeeder
类,不过,你也可以使用 --class
选项来指定你想要运行的独立的填充器类:
php artisan db:seed php artisan db:seed --class=UsersTableSeeder
你还可以使用 migrate:refresh
命令来填充数据库,该命令还可以回滚并重新运行所有迁移,这在需要完全重建数据库时很有用:
php artisan migrate:refresh --seed
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- laravel 使用 Faker 数据填充
- Faker 虚拟数据填充和源码解析
- hapi框架搭建记录(三):Joi数据校验和Sequelize(数据迁移、填充数据)
- jsp从数据库获取数据填充下拉框实现二级联动菜单的方法
- jsp从数据库获取数据填充下拉框实现二级联动菜单的方法
- AES 算法(三):填充模式
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Game Engine Architecture, Second Edition
Jason Gregory / A K Peters/CRC Press / 2014-8-15 / USD 69.95
A 2010 CHOICE outstanding academic title, this updated book covers the theory and practice of game engine software development. It explains practical concepts and techniques used by real game studios,......一起来看看 《Game Engine Architecture, Second Edition》 这本书的介绍吧!