Laravel 可以用 seed 类轻松地为数据库填充测试数据。所有的 seed 类都存放在 database/seeds 目录下。你可以任意为 seed 类命名,但是应该遵守类似 UsersTableSeeder 的命名规范。Laravel 默认定义了一个 DatabaseSeeder 类。可以在这个类中使用 call 方法来运行其它的 seed 类来控制数据填充的顺序。
注意 laravel常用函数文件 :
- vendor/laravel/framework/src/Illuminate/Foundation/helpers.php
- vendor/laravel/framework/src/Illuminate/Support/helpers.php
命令
在laravel项目根目录下,执行如下:
php artisan
查看所有命令
php artisan help make:seeder
如:查看 Seeder 命令参数帮助
1.创建Seeders
可以通过运行 make:seeder
[Artisan 命令]来生成一个 Seeder,如
php artisan make:seeder UsersTableSeeder
生成之后的文件存放在 database / seeds
目录下。
2.factories / ModelFactory模型工厂
Faker是一个为您生成虚假数据的PHP库,Faker 官网:https://github.com/fzaninotto/Faker#populating-entities-using-an-orm-or-an-odm
使用 database / factories / ModelFactory
目录下的 ModelFactory
文件模型工厂 文件模型工厂生成随机数据,如:
// 设置添加到数据库的随机数据
$factory->define(App\Users::class, function (Faker\Generator $faker) {
return [
'title' => $faker->sentence(2),
'content' => $faker->paragraph(10),
'user_id' => floor(mt_rand())
];
});
其中 App\Users::class
的 Users 是模型。
3.调用模型工厂
在步骤1生成的 seeder 文件中,进行调用步骤2编写好模型工厂,如:
public function run()
{
factory(App\Users::class,50)->create();
}
4.调用 Seed
在 database / seeds
下的 DatabaseSeeder
类中调用编写好的 UsersTableSeeder
,如:
public function run()
{
$this->call(UersTableSeeder::class);
}
5.执行添加数据
在项目根目录下,打开 cmd ,执行
php artisan db:seed
也可以用 --class 选项来单独运行一个特定的 seeder 类:
php artisan db:seed --class=UsersTableSeeder
不知道命令,可以查看本文开头的命令,执行一下,看到 Seeding: PostsTableSeeder ,就添加数据成功了。
注意:
描述一个问题:
1.我先调用:
php artisan make:seeder AdminUserTableSeeder
2.生成一个 'AdminUserTableSeeder' 类,但是发现,应该命名为'AdminUsersTableSeeder',用户应该为复数。然后我就手动修改了文件&文件内部的类名。
3.执行:
php artisan db:seed
直接报错:
[ReflectionException] Class AdminUsersTableSeeder does not exist
解决方法:
composer dump-autoload
或者,清除缓存 php artisan cache:clear / php artisan config:clear
随即想到,php artisan 命名,可能生成了一些 composer 相关的缓存,去 'vendor/composer/' 发现了几个autoload_xx.php文件,这里就是 composer 自动加载的文件列表!也同 'composer.json' 中的 'autoload' 的配置,有很大关联