web-dev-qa-db-fra.com

Laravel 5.2: Impossible de localiser l'usine avec le nom [par défaut]

Je veux semer la base de données quand j'utilise ceci

 public function run()
{
    $users = factory(app\User::class, 3)->create();
}

Ajouter trois utilisateurs dans la base de données mais quand j'utilise ceci

 public function run()
{
    $Comment= factory(app\Comment::class, 3)->create();
}

Montrez-moi une erreur

[InvalidArgumentException]
Impossible de localiser l'usine avec le nom [par défaut] [app\Comment].

24
paranoid

Par défaut, l'installation laravel est livrée avec ce code dans le database/factories/ModelFactory.php Fichier.

$factory->define(App\User::class, function (Faker\Generator $faker) {
    return [
        'name' => $faker->name,
        'email' => $faker->email,
        'password' => bcrypt(str_random(10)),
        'remember_token' => str_random(10),
    ];
});

Vous devez donc définir un modèle d'usine avant de l'utiliser pour amorcer la base de données. Cela utilise simplement une instance de Faker Library qui est utilisée pour générer de fausses données pour amorcer la base de données pour effectuer des tests.

Assurez-vous d'avoir ajouté une usine modale similaire pour le modèle de commentaires.

Ainsi, vos commentaires Model Factory ressembleront à ceci:

$factory->define(App\Comment::class, function (Faker\Generator $faker) {
    return [
        'comment' => $faker->sentence,
         // Any other Fields in your Comments Model 
    ];
});
34
Mohan

Si rien ne sert avec PHPUnit.

Pour ceux des lecteurs qui ont collé avec le même problème dans les tests, j'ai découvert que j'avais oublié d'ajouter parent::setUp() dans setUp méthode.

26
Darmen Amanbayev

Cela peut également se produire lorsque vous exécutez la commande factory()->create() à partir de php artisan tinker. Assurez-vous d'enregistrer le fichier database/factories/ModelFactory.php avant d'ouvrir le bricoleur

14
Agu Dondo

Étape 1 - Assurez-vous que CommentFactory utilise Commentaire au lieu de Modèle.

use App\Comment
...

    $factory->define(Comment::class, function (Faker $faker){

Étape 2 - Vérifiez que les noms sont corrects dans CommentsTableSeeder.

use App\Comment
...

public function run()
{
  factory(Comment::class, 3)->create();
}

Bonne chance!

7
Cherma Ramalho

J'utilise laravel 5.5 et pour cela, c'est un peu différent. Vous devez créer CommentFactory.php inside \ database\factories directory et l'ajouter à l'intérieur,

$factory->define(App\Comment::class, function (Faker\Generator $faker) {
    return [
        'comment' => $faker->sentence,
         // Any other Fields in your Comments Model 
    ];
});

Et ajoutez ceci,

$Comment= factory(\App\Comment::class, 3)->create();

au lieu de

$Comment= factory(app\Comment::class, 3)->create();

Je voulais juste ajouter cela car je suis confronté au même problème pour la version ultérieure et ce fil m'a beaucoup aidé à le résoudre.

5
vimuth

Cela pourrait être un problème de cache. Vous pouvez le résoudre en exécutant les commandes suivantes.

php artisan clear-compiled
composer dump-autoload
php artisan optimize
2
Abhilash Asokan

J'utilise Laravel Framework 5.7.19. Et dans mon cas, mon fichier d'usine est généré à partir de la ligne de commande make:factory. Le modèle par défaut dans le fichier est:

$factory->define(Model::class, ...

Vous devez changer le nom Model en ce que vous voulez exactement utiliser, dans mon cas c'est \App\InterviewQuestion, il devient donc:

$factory->define(\App\InterviewQuestion::class, ...
1
Yarco

J'essayais de tester Model Factory à partir de bricolage. J'avais créé la fabrique de modèles comme expliqué dans le fil ci-dessus et d'autres Laravel docs. Mais il ne fonctionnerait pas et lançait un InvalidArgumentException avec un message

Impossible de localiser l'usine avec le nom [par défaut] [/ App/Game]

Je l'exécutais en ligne de commande Tinker en tant que:

factory('\App\Game')->create();

Après un certain temps, j'ai trouvé que le problème était la barre oblique inverse principale \. Je l'ai couru comme ci-dessous et cela a bien fonctionné .:

factory('App\Game')->create();

C'est idiot, mais ça peut aider quelqu'un.

0
Mihir Kagrana