Saltar al contenido

Sembrar una tabla dinámica usando fábricas en Laravel

Revisamos exhaustivamente cada tutorial en nuestro espacio con la meta de mostrarte siempre información certera y actual.

Solución:

No creo que este sea el mejor enfoque, pero funciona para mí.

$factory->define(AppUserSkill::class, function (FakerGenerator $faker) 
    return [
        'user_id' => factory(AppUser::class)->create()->id,
        'skill_id' => factory(AppSkill::class)->create()->id,
    ];
);

Si no desea crear un modelo solo para la tabla dinámica, puede insertarlo manualmente.

DB::table('user_skill')->insert(
    [
        'user_id' => factory(AppUser::class)->create()->id,
        'skill_id' => factory(AppSkill::class)->create()->id,
    ]
);

O bien, con valores aleatorios existentes.

DB::table('user_skill')->insert(
    [
        'user_id' => User::select('id')->orderByRaw("RAND()")->first()->id,
        'skill_id' => Skill::select('id')->orderByRaw("RAND()")->first()->id,
    ]
);

Tuve un problema similar y lo resolví de esta manera en las pruebas de Laravel.

No es necesario crear un nuevo modelo de UserSkills:

Versión Laravel 5.7

Base de datos

users                user_skill                               skills
+----------------+   +------------------------------------+   +-----------------+
| id  | name     |   | user_id | section_id | state_skill |   | id  | skills    |
+----------------+   +------------------------------------+   +-----------------+
| 1   | Alex     |   |         |            |             |   | 1   | draw      |
|----------------|   |----------------------|-------------|   |-----------------|
| 2   | Lucy     |   |         |            |             |   | 2   | program   |
|----------------|   |----------------------|-------------|   |-----------------|
| 3   | Max      |   |         |            |             |   | 3   | social    |
|----------------|   |----------------------|-------------|   +-----------------+
| 4   | Sam      |   |         |            |             |
+----------------+   +----------------------+-------------+

Usuario.php

belongsToMany('AppSkill')
                ->withTimestamps()
                ->withPivot('state_skill');
    

PruebaBaseDeDatos.php

create()
           ->each(function ($user) 

                // Create Models Support
                $skill = factory(AppSkill::class)->create();
                
                // Create Pivot with Parameters
                $user->skills()->attach($skill->id,[
                    'state_skill' => 'ok'
                ]);
 
            );

        // Testing
        // ...
        $this->assertTrue(true);
    

Para aquellos que usan laravel 8.x y buscan una solución a un problema como este;

En laravel 8.x, puede alimentar su pivote usando métodos mágicos, por ejemplo, si tiene una relación de pertenencia a muchos llamada “userSkills” en el modelo de usuario, debe alimentar la tabla dinámica de esta manera:

User::factory()->hasUserSkills(1, ['skills' => 'draw'])->create();

Puede encontrar la documentación aquí.

Aquí puedes ver las reseñas y valoraciones de los usuarios

Si aceptas, tienes la habilidad dejar una noticia acerca de qué le añadirías a este escrito.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *