主题
数据填充
我们在使用 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
查看数据库,对应的数据已经填充到数据库了
但是这个方法有一个弊端,DatabaseSeeder
会运行所有 seeder
类,上面运行的 User
填充只能运行一次,因为 email
字段如果相同的话,会导致 SQL 无法运行,因为 email
字段设置了 unique
唯一索引。所以有时候我们需要运行特定的类。使用下面的命令再运行一次。
shell
php artisan db:seed --class=ProfileSeeder
再回到数据库客户端,你会看到新的添加的数据
关于 Seed
的其他用法,可以查看数据填充文档