Определите фабричные типы отдельно
$factory->define(PersonAddress::class, function (Faker $faker) {
return [
'Address' => $faker->buildingNumber . ',' . $faker->streetName . ',' . $faker->streetAddress,
'Landmark' => $faker->optional()->words(3, true),
'CityID' => App\Entities\City::inRandomOrder()->first()->CityID,
'PostalCode' => $faker->postcode,
'IsPermanent' => false,
'IsCurrent' => false,
];
});
$factory->defineAs(PersonAddress::class, 'permanent', function (Faker $faker) {
$address = $factory->raw(PersonAddress::class);
return array_merge($address, ['IsPermanent' => true, 'IsCurrent' => false]);
});
$factory->defineAs(PersonAddress::class, 'current', function (Faker $faker) {
$address = $factory->raw(PersonAddress::class);
return array_merge($address, ['IsPermanent' => false, 'IsCurrent' => true]);
});
$factory->defineAs(PersonAddress::class, 'permanent_and_current', function (Faker $faker) {
$address = $factory->raw(PersonAddress::class);
return array_merge($address, ['IsPermanent' => true, 'IsCurrent' => true]);
});
И используйте их для случайной генерации
public function run() {
$no_of_persons = (int)$this->command->ask('How many persons do you want to create?', 10);
$this->command->info("Seeding {$no_of_persons} persons");
$persons = factory(App\Entities\Person::class, $no_of_persons)->create();
$this->command->info('Persons Created!');
// Creating addresses for persons
$this->command->info('Creating Addresses for persons');
$persons->each(
function ($person) {
if (rand(1, 2) == 1) {
// make different current and permanent addresses
factory(App\Entities\PersonAddress::class, 'permanent', rand(1, 5))->create(['PersonID' => $person->PersonID]);
factory(App\Entities\PersonAddress::class, 'current', rand(1, 5))->create(['PersonID' => $person->PersonID]);
} else {
// make same address as permanent and current
factory(App\Entities\PersonAddress::class, 'permanent_and_current', rand(1, 5))->create(['PersonID' => $person->PersonID]);
}
// make some random addresses
factory(App\Entities\PersonAddress::class, rand(0, 3))->create(['PersonID' => $person->PersonID]);
});
$this->command->info('Addresses Created!');
}