create(); if ($this->faker->boolean(90)) { /** @var \App\Models\Food $ingredient */ $ingredient = Food::factory()->create(); $unit = Nutrients::units()->pluck('value')->random(1)->first(); } else { /** @var \App\Models\Recipe $ingredient */ $ingredient = Recipe::factory()->create(); $unit = 'serving'; } return [ 'ingredient_id' => $ingredient->id, 'ingredient_type' => $ingredient::class, 'amount' => $this->faker->randomFloat(1, 1/3, 5), 'unit' => $unit, 'detail' => $this->faker->optional(0.8)->realText(), 'weight' => $this->faker->optional(0.8)->numberBetween(0, 50), 'parent_id' => $recipe->id, 'parent_type' => $recipe::class, ]; } /** * Define a specific parent. */ public function parent(Model $parent): static { return $this->state(function (array $attributes) use ($parent) { return [ 'parent_id' => $parent->id, 'parent_type' => $parent::class, ]; }); } /** * Define a specific ingredient. */ public function ingredient(Model $ingredient): static { return $this->state(function (array $attributes) use ($ingredient) { return [ 'ingredient_id' => $ingredient->id, 'ingredient_type' => $ingredient::class, ]; }); } }