Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

181
Vistas
Fábrica creando múltiples modelos con diferente número de relaciones

Estoy usando el siguiente código para crear 20 publicaciones, cada una de las cuales tiene 3 comentarios.

 Post::factory() ->times(20) ->has(Comment::factory()->times(3)) ->create()

En su lugar, me gustaría crear 20 publicaciones, cada una de las cuales tiene un número aleatorio de comentarios (por ejemplo, la publicación 1 tiene 2 comentarios, la publicación 2 tiene 4 comentarios, etc.)

Esto no funcionó, cada publicación tenía el mismo número (aleatorio) de comentarios.

 Post::factory() ->times(20) ->has(Comment::factory()->times(rand(1, 5))) ->create()

¿Cómo puedo conseguir esto?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

No es posible tener un número dinámico de modelos relacionados por modelo si está usando ->times hasta donde yo sé. En su lugar, puede intentar:

 collect(range(0,19)) ->each(function () { Post::factory() ->has(Comment::factory()->times(rand(1,5))) ->create(); });

Esto debería crear 20 publicaciones una por una con un número aleatorio de comentarios en cada una. Puede ser un poco más lento, pero probablemente no mucho

over 4 years ago · Santiago Trujillo Denunciar

0

Usaría un método de fábrica para hacer esto. Agregue un método a su fábrica de Post como este:

 <?php namespace Database\Factories\App; use App\Comment; use App\Post; use Illuminate\Database\Eloquent\Factories\Factory; class PostFactory extends Factory { public function definition(): array { return [ // ... ]; } public function addComments(int $count = null): self { $count = $count ?? rand(1, 5); return $this->afterCreating( fn (Post $post) => Comment::factory()->count($count)->for($post)->create() ); } }

Luego, en su prueba, simplemente puede llamarlo así:

 Post::factory()->count(20)->addComments()->create();
over 4 years ago · Santiago Trujillo Denunciar

0

Actualizado: Eso debería funcionar: Inspirado en apokryfos. Si eso no funciona, eso:

 for($i=0; $i<20; $i++) { $times = rand(1,5); Post::factory() ->has(Comment::factory()->times($times)) ->create(); }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda