编写填充器
php artisan make:seeder UserTableSeeder
修改Laravel安装时自带的DatabaseSeeder
类,添加一个数据库插入语句到run
方法:
<?php use DB;
use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model; class DatabaseSeeder extends Seeder{
/**
* 运行数据库填充
*
* @return void
*/
public function run()
{
DB::table('users')->insert([
'name' => str_random(),
'email' => str_random().'@gmail.com',
'password' => bcrypt('secret'),
]);
}
}
使用模型工厂
使用帮助函数factory
来插入记录到数据库。
创建50个用户并添加关联关系到每个用户:
public function run(){
factory('App\User', )->create()->each(function($u) {
$u->posts()->save(factory('App\Post')->make());
//$u->posts()->saveMany(factory('App\Post', mt_rand(1,5))->make());
}); }
调用额外的填充器
在DatabaseSeeder
类中,使用call
方法执行额外的填充类
public function run(){
Model::unguard(); $this->call(UserTableSeeder::class);
$this->call(PostsTableSeeder::class);
$this->call(CommentsTableSeeder::class);
}
运行填充器
php artisan db:seed
php artisan db:seed --class=UserTableSeeder
你还可以使用migrate:refresh
命令来填充数据库,该命令还可以回滚并重新运行迁移,这在需要完全重建数据库时很有用:
php artisan migrate:refresh --seed
运行SQL填充
public function run()
{
Eloquent::unguard(); $this->call('UserTableSeeder');
$this->command->info('User table seeded!'); $path = 'app/developer_docs/countries.sql';
DB::unprepared(file_get_contents($path));
$this->command->info('Country table seeded!');
}