0

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
        ];
    }
}
marc_s
  • 732,580
  • 175
  • 1,330
  • 1,459
Charix
  • 29
  • 3

0 Answers0