I am wondering if this is possible. I have ProgrammeSeeder
seeding the manual array of programs. Then I have the factory for age groups. I have drafted the code blocks below. I don't want to use a factory for the Programme
class as programs are static.
class ProgrammeSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
$programmes = [
["programme_type_code" => "RP", "name" => "2 Turns 50% Refund", "refund_percent" => 50, "number_of_turns" => 2],
["programme_type_code" => "RP", "name" => "2 Turns 70% Refund", "refund_percent" => 70, "number_of_turns" => 2],
["programme_type_code" => "RP", "name" => "2 Turns 100% Refund", "refund_percent" => 100, "number_of_turns" => 2],
["programme_type_code" => "RP", "name" => "3 Turns 50% Refund", "refund_percent" => 50, "number_of_turns" => 3],
["programme_type_code" => "RP", "name" => "3 Turns 70% Refund", "refund_percent" => 70, "number_of_turns" => 3],
];
foreach ($programmes as $programme) {
$programme = Programme::create($programme)->each(function ($programme) {
ProgrammeDefaultAges::factory()->create(
[
'programme_id' => $programme->id
]);
});
/* something like above. I am manually feeding the Programmes. Programmes have Many default age groups. Each programme has 3 groups.
}
}
}
----------
class ProgrammeDefaultAgesFactory extends Factory
{
protected $model = ProgrammeDefaultAges::class;
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
$ProgrammeDefaultAges = [];
$startAge = 10;
$endAge = 37;
$increment = 17;
$nextMinAge = $startAge;
$nextMaxAge = $nextMinAge + $increment;
for ($i = 0; $i < 3; $i++) {
$ProgrammeDefaultAges = [
'age_min' => $nextMinAge,
'age_max' => $nextMaxAge > $endAge ? $endAge : $nextMaxAge,
];
$increment = 5;
$nextMinAge = $nextMaxAge + 1;
$nextMaxAge = $nextMinAge + $increment;
}
return [
'programme_default_ages' => $ProgrammeDefaultAges
];
}
}