2 votes

Laravel factory / seeder créant des enregistrements doubles spécifiés

J'ai Users y UserProfiles .

Tous Users ont un et un seul UserProfile .

Mon UserTableSeeder crée 25 enregistrements et, pour chacun d'entre eux, génère un message de type UserProfile .

Pour une raison quelconque, j'obtiens le double des enregistrements sur Users et le montant indiqué sur UserProfile Alors 50 Users sont insérés et 25 UserProfiles sont en cours d'insertion.

Graine :

public function run()
    {
        factory(App\User::class, 25)->create()->each(function ($user) {
            $user->profile()->save(factory(App\UserProfile::class)->make());
        });
    }

Classe d'utilisateurs :

class User extends Model
{

    public function profile() {
        return $this->hasOne('App\UserProfile');
    }

}

UserFactory :

$factory->define(User::class, function (Faker $faker) {
    return [
        'username' => $faker->userName(),
        'email' => $faker->unique()->safeEmail,
        'email_verified_at' => now(),
        'password' => '$2y$10$TKh8H1.PfQx37YgCzwiKb.KjNyWgaHb9cbcoQgdIVFlYg7B77UdFm', // secret
        'remember_token' => Str::random(10),
    ];
});

UserProfileFactory :

$factory->define(UserProfile::class, function (Faker $faker) {
    return [
        'user_id' => factory('App\User'::class)->create()->id,
        'bio' => $faker->paragraph()
    ];
});

Modèle UserProfile :

class UserProfile extends Model
{
    public function user() {
        return $this->belongsTo('App\User');
    }
}

Le résultat attendu était 25 utilisateurs et 25 tables d'utilisateurs puisque tous les utilisateurs ont un profil.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X