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].
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
];
});
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.
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
É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!
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.
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
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, ...
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.