Skip to content

数据填充

我们在使用 migration 之后,生成对应的表结构。为了测试,我们需要一些初始化数据。一般情况下,我们可以到 Mysql 表里手动填充对应的数据。但是在 Laravel 里,我们可以使用 seed 来进行改操作。首先先创建一个 Seeder 使用下面的命令

创建

shell
php artisan make:seeder ProfileSeeder

对应的文件会生成到 database/seeders/ProfileSeeder.php 里。打开该文件,使用 DB 来填充数据

php
namespace Database\Seeders;

use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;

class ProfileSeeder extends Seeder
{
    /**
     * Run the database seeds.
     */
    public function run(): void
    {
        // 添加一条个人信息
        DB::table('profiles')->insert([
            'name' => 'JaguarJack',
            'email' => 'njphper@gmail.com',
            'age'  => 18,
            'info' => '后端开发工程师,前端入门选手,略知相关服务器知识,偏爱❤️ Laravel & Vue',
            'created_at' => date('Y-m-d H:i:s'),
            'updated_at' => date('Y-m-d H:i:s'),
        ]);
    }
}

在找到对应的 DatabaseSeeder 类, 跟 ProfileSeeder 平级,代码如下

php
namespace Database\Seeders;

use App\Models\User;
// use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Seed the application's database.
     */
    public function run(): void
    {
        // User::factory(10)->create();

        //User::factory()->create([
         //   'name' => 'Test User',
         //   'email' => 'test@example.com',
       // ]);

        // 在这里调用 ProfileSeeder 类
        $this->call(ProfileSeeder::class);
    }
}

运行

创建好 Seeder 文件之后,再运行下面的命令填充数据的命令

shell
php artisan db:seed

查看数据库,对应的数据已经填充到数据库了 laravel 入门教程 seed 数据填充

但是这个方法有一个弊端,DatabaseSeeder 会运行所有 seeder 类,上面运行的 User 填充只能运行一次,因为 email 字段如果相同的话,会导致 SQL 无法运行,因为 email 字段设置了 unique 唯一索引。所以有时候我们需要运行特定的类。使用下面的命令再运行一次。

shell
php artisan db:seed --class=ProfileSeeder

再回到数据库客户端,你会看到新的添加的数据

laravel 入门教程 seed 数据填充

关于 Seed 的其他用法,可以查看数据填充文档