web-dev-qa-db-ja.com

Laravel 5.2:名前を持つファクトリーを見つけることができません[デフォルト]

これを使用するときにデータベースをシードしたい

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

データベースに3人のユーザーを追加しますが、これを使用する場合

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

エラーを表示

[InvalidArgumentException]
[default] [app\Comment]という名前のファクトリーが見つかりません。

24
paranoid

デフォルトでは、laravelインストールはdatabase/factories/ModelFactory.phpファイル。

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

したがって、データベースをシードするために使用する前に、ファクトリモデルを定義する必要があります。これは、 Faker Library のインスタンスを使用します。これは、テストを実行するためにデータベースにシードするための偽のデータを生成するために使用されます。

コメントモデルに同様のモーダルファクトリが追加されていることを確認してください。

したがって、コメントモデルファクトリは次のようになります。

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

何もPHPUnitに役立たない場合。

テストで同じ問題にこだわる読者のために、setUpメソッドにparent::setUp()を追加するのを忘れていることがわかりました。

26

これは、_php artisan tinker_からコマンドfactory()->create()を実行している場合にも発生する可能性があります。 Tinkerを開く前に、ファイル_database/factories/ModelFactory.php_を必ず保存してください

14
Agu Dondo

1ºステップ-Comment CommentFactoryがモデルではなくコメントを使用していることを確認します。

use App\Comment
...

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

2ºステップ-CommentsTableSeederで名前が正しいことを確認します。

use App\Comment
...

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

がんばろう!

7
Cherma Ramalho

laravel 5.5を使用していますが、そのためにこれは少し異なります。 CommentFactory.php inside \ database\factoriesディレクトリを作成し、これを内部に追加する必要があります。

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

これを追加して、

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

の代わりに

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

後のバージョンでも同じ問題に直面しているため、このスレッドを追加したかっただけで、このスレッドは修正に大いに役立ちました。

5
vimuth

これはキャッシュの問題である可能性があります。コマンドに続くコマンドを実行して解決できます。

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

Laravel Framework 5.7.19を使用しています。私の場合、ファクトリファイルはコマンドラインmake:factoryから生成されます。ファイルのデフォルトモデルは次のとおりです。

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

名前Modelを使用したいものに変更する必要があります。私の場合は\App\InterviewQuestionなので、次のようになります。

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