Laravel学习笔记基础系列--(十九)Laravel 数据填充

作者: 温新

分类: 【Laravel】

阅读: 1353

时间: 2021-07-18 14:26:57

作者:温新

时间: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

我是温新

每天进步一点点,就一点点

请登录后再评论