首页 > 解决方案 > 为特定值制作播种机

问题描述

我在 Laravel 中使用播种机。我有一个名为的表,nationalities它有两列:我想为多个具有特定唯一值(德语、法语等)的记录播种。idname.

国籍Seeder.php

use Illuminate\Database\Seeder;
use App\Nationality;

class NationalitySeeder extends Seeder
{
    public function run()
    {
        $nation = Nationality::create([
            'name' => 'american'
        ]);
    }
}

DatabaseSeeder.php

use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    /** Seed the application's database **/

    public function run()
    {
        $this->call(NationalitySeeder::class);
    }
}

标签: laravellaravel-seeding

解决方案


在名为 NationalityFactory.php 的工厂文件中创建一个database/factories包含以下代码的工厂文件:

use Faker\Generator as Faker;

$factory->define(App\Nationality::class, function (Faker $faker) {
    return [
        'name' => $faker->languageCode,
    ];
});

在 NationalitySeeder.php 中放入以下代码

$nationalities = ['German', 'French', 'etc.'];

factory(App\Nationality::class, count($nationalities))
           ->create()
           ->each(function ($nationality, $key) use ($nationalities) {
                $nationality->name = $nationalities[$key];
            });

这将根据您使用 Laravel 工厂在数组中配置的数量来确定国籍。


推荐阅读