Bonjour,

Voilà je rencontre un petit problème avec mon code.

Ce que je fais

Je souhaite remplir ma table categories via un factory(). Voici mon code :

$factory->define(App\Category::class, function (Faker $faker) {
    $categories = ['Hardware', 'Software', 'Planning', 'Tools'];
    foreach ($categories as $category) {
        return [
            'name' => $category
        ];
    }
});

Ce que je veux

Je souhaite que ma table categories soit remplies avec les données 'Hardware', 'Software', 'Planning', 'Tools'.

Ce que j'obtiens

Puisque je fais un return dans mon foreach, au premier tour de boucle je sors du foreach et je me retrouve avec qu'un seul enregistrement, soit 'Harware'.

Merci pour votre aide !

5 réponses


Bonjour à toi !
Tu peux essayer un truc comme ca :


$categories = ['Hardware', 'Software', 'Planning', 'Tools'];
$factory->define(App\Category::class, function (Faker $faker) use ($categories) {
return [
            'name' => $faker->randomElement($categories)
        ]
}

Non ça ne fonctionnera pas car la méthode randomElement va me sortir un élément au hasard alors que je veux remplir ma table de tous les éléments !

Je n'ai pas du saisir complètement le problème, car je moi je ferais tous bêtement cela:

$factory->define(App\Category::class, function (Faker $faker) {
    $categories = ['Hardware', 'Software', 'Planning', 'Tools'];
    return $categories
});

C'est pas ça que tu veux faire ?

$factory->define(App\Category::class, function (Faker $faker) {
    $categories = ['Hardware', 'Software', 'Planning', 'Tools'];
    foreach ($categories as $category) {
        \App\Category::make(['name' => $category]);
    }
});

mais je comprend pas trop l'idée de vouloir forcer le nom des catégories dans une factory, c'est truc là c'est fait pour les tests, ton code ne devrait pas etre couplé avec la valeur d'une table en test. Si tu pouvais expliquer pourquoi tu as besoin de forcer le nom.

Salut Macsim, merci pour ton message.

En fait je veut forcer ces noms car au début de mon test je lance un factory et je sais ce qu'il y a dans ma table !