Laravel学习笔记基础系列--(十九)Laravel 数据填充
作者:温新
时间:2021-06-27
hi,我是温新,一名PHPer
开发过程中需要数据用于测试,手动添加数据得累死。Laravel提供了填充器用于快速生成测试数据。
已知有一个users
表,那么现在就基于users
表填充数据,用于后续的CURD操作。
方式一:Seeder填充数据
第一步:创建填充器
命令:make:seeder
php artisan make:seeder UserSeeder
该命令会在
database/seeders
目录下生成对应的填充器文件。
来看看刚刚生成的文件结构:
// database/seeders/UserSeeder.php
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
class UserSeeder extends Seeder
{
public function run()
{
}
}
run
方法是默认的,当执行生成数据时,run
方法会被调用。
第二步:编写数据填充代码
// database/seeders/UserSeeder.php
use Illuminate\Support\Facades\DB;
public function run()
{
DB::table('users')->insert([
'name' => '你真帅',
'email' => 'nizhenshua@sina.com',
'nickname' => '帅气',
'password' => bcrypt('123456'),
]);
}
第三步:重新生成composer自动加载
composer dump-autoload
第四步:执行数据填充
命令:db:seed
php artisan db:seed --class=UserSeeder
打开数据库表看,会发现神奇的多了一条数据。
此处一定要指定填充器类文件名。
db:seed
命令运行的DatabaseSeeder
类文件。
方式二:模型工厂填充数据
方法一:db类
项目初始化后,factories
目录下会有一个默认的UserFactory
模型工厂填充类。现在,把这个类文件删除掉,一步一步走一个完整的流程。
第一步:生成模型类
php artisan make:model User
第二步:创建模型工厂
命令:make:factory
php artisan make:factory UserFactory
该命令会在database/factories
目录下生成对应的类文件
// database/factories/UserFactory.php
<?php
namespace Database\Factories;
use App\Models\User;
use Illuminate\Database\Eloquent\Factories\Factory;
class UserFactory extends Factory
{
protected $model = User::class;
public function definition()
{
return [];
}
}
第三步:编写模型工厂文件
// database/factories/UserFactory.php
<?php
namespace Database\Factories;
use App\Models\User;
use Illuminate\Database\Eloquent\Factories\Factory;
public function definition()
{
return [
'name' => $this->faker->name(),
'email' => $this->faker->email(),
'password'=>$this->faker->password(),
];
}
第四步:创建seeder填充器类
php artisan make:seeder UserSeeder
第五步:编写填充器类
// UserSeeder.php
<?php
namespace Database\Seeders;
use App\Models\User;
use Illuminate\Database\Seeder;
class UserSeeder extends Seeder
{
public function run()
{
// users表中添加10条数据
User::factory(10)->create();
}
}
第六步:composer自动加载
composer dump-autoload
第七步:执行填充
php artisan db:seed --class=UserSeeder
方法二:DatabaseSeeder填充
与方法一相比,前面几个步骤都是一样的,这里我们从 方法一
的第五步
开始:
第五步(方式一):call()填充
// database/seeders/DatabaseSeeder.php
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
public function run()
{
// 调用seeder填充类
$this->call(UserSeeder::class);
}
}
第五步(方式二):factory填充
<?php
// database/seeders/DatabaseSeeder.php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
public function run()
{
// 使用factory填充100条数据
\App\Models\User::factory(100)->create();
}
}
第五步的这两种方法,任选其中一个即可。
第六步:执行填充
php artisan db:seed
在使用DatabaseSeeder进行填充时,执行的命令必须是
db:seed
我是温新
每天进步一点点,就一点点
请登录后再评论