wake-up-neo.com

Laravel 5.2: Factory mit Name kann nicht gefunden werden [Standard]

Ich möchte die Datenbank festlegen, wenn ich diese verwende

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

Fügen Sie drei Benutzer in der Datenbank hinzu, aber wenn ich dies verwende

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

Zeige mir Fehler

[InvalidArgumentException]
Das Werk mit dem Namen [Standard] [App\Kommentar] kann nicht gefunden werden.

24
paranoid

Standardmäßig enthält die laravel Installation diesen Code in der database/factories/ModelFactory.php Datei.

$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),
    ];
});

Sie müssen also ein Factory-Modell definieren, bevor Sie es zum Erstellen einer Datenbank verwenden. Dies verwendet nur eine Instanz von Faker Library , die zum Generieren von gefälschten Daten verwendet wird, um die Datenbank für die Durchführung von Tests zu seeden.

Stellen Sie sicher, dass Sie eine ähnliche Modal Factory für das Kommentarmodell hinzugefügt haben.

Ihre Comments Model Factory wird also ungefähr so ​​aussehen:

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

Wenn nichts hilft mit PHPUnit.

Bei Lesern, die sich in Tests mit dem gleichen Thema beschäftigten, habe ich festgestellt, dass ich vergessen habe, parent::setUp() in setUp einzufügen.

26

Dies kann auch passieren, wenn Sie den Befehl factory()->create() von php artisan tinker Ausführen. Stellen Sie sicher, dass Sie die Datei database/factories/ModelFactory.php Speichern, bevor Sie basteln

14
Agu Dondo

1º Schritt - Stellen Sie sicher, dass CommentFactory Comment anstelle von Model verwendet.

use App\Comment
...

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

2º Schritt - Vergewissern Sie sich, dass die Namen in CommentsTableSeeder korrekt sind.

use App\Comment
...

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

Viel Glück!

7
Cherma Ramalho

Ich benutze laravel 5.5 und dafür ist das etwas anders. Sie müssen CommentFactory.php inside \ database\factories directory erstellen und dieses inside hinzufügen,

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

Und füge dies hinzu,

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

anstatt

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

Ich wollte dies nur hinzufügen, da ich das gleiche Problem für eine spätere Version habe und dieser Thread mir sehr geholfen hat, es zu beheben.

5
vimuth

Dies könnte ein Cache-Problem sein. Sie können es beheben, indem Sie die folgenden Befehle ausführen.

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

Ich benutze Laravel Framework 5.7.19. In meinem Fall wird meine Factory-Datei über die Befehlszeile generiert make:factory. Das Standardmodell in der Datei ist:

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

Sie sollten den Namen Model so ändern, dass er genau dem entspricht, den Sie verwenden möchten. In meinem Fall ist es \App\InterviewQuestion.

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

Ich habe versucht, Model Factory von basteln zu testen. Ich hatte eine Modellfabrik erstellt, wie im obigen Thread und in anderen Laravel docs beschrieben. Aber sie lief nicht und warf eine InvalidArgumentException mit der Meldung

Fabrik mit Name kann nicht gefunden werden [Standard] [/ App/Spiel]

Ich habe es in der Tinker-Befehlszeile ausgeführt als:

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

Nach einiger Zeit stellte ich fest, dass das Problem der führende Backslash \ War. Ich lief es wie unten und es hat gut funktioniert .:

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

Dumme Sache, kann aber jemandem helfen.

0
Mihir Kagrana