Сделать сеялку для конкретных значений
Я использую сеялку в Laravel. У меня есть стол nationalities
это имеет два столбца: id
а также name.
Я хочу использовать более одной записи с определенными уникальными значениями (немецкий, французский и т. Д.).
NationalitySeeder.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);
}
}
2 ответа
Ответ обновлен для Laravel 8.x.
database/seeders/NationalitySeeder.php
:
<?php
namespace Database\Seeders;
use App\Models\Nationality;
use Illuminate\Database\Seeder;
class NationalitySeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
$nationalities = ['German', 'French'];
Nationality::factory()
->count(count($nationalities))
->sequence(fn ($sequence) => ['name' => $nationalities[$sequence->index]])
->create();
}
}
database/factories/NationalityFactory.php
:
<?php
namespace Database\Factories;
use Illuminate\Database\Eloquent\Factories\Factory;
class NationalityFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array
*/
public function definition()
{
return [
// the following default value is overwritten by NationalitySeeder
'name' => $this->faker->languageCode(),
];
}
}
Сделать заводской файл в database/factories
называется NationalityFactory.php, содержащий следующий код:
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.