これを使用するときにデータベースをシードしたい
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]という名前のファクトリーが見つかりません。
デフォルトでは、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
];
});
何もPHPUnitに役立たない場合。
テストで同じ問題にこだわる読者のために、setUp
メソッドにparent::setUp()
を追加するのを忘れていることがわかりました。
これは、_php artisan tinker
_からコマンドfactory()->create()
を実行している場合にも発生する可能性があります。 Tinkerを開く前に、ファイル_database/factories/ModelFactory.php
_を必ず保存してください
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();
}
がんばろう!
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();
後のバージョンでも同じ問題に直面しているため、このスレッドを追加したかっただけで、このスレッドは修正に大いに役立ちました。
これはキャッシュの問題である可能性があります。コマンドに続くコマンドを実行して解決できます。
php artisan clear-compiled
composer dump-autoload
php artisan optimize
Laravel Framework 5.7.19
を使用しています。私の場合、ファクトリファイルはコマンドラインmake:factory
から生成されます。ファイルのデフォルトモデルは次のとおりです。
$factory->define(Model::class, ...
名前Model
を使用したいものに変更する必要があります。私の場合は\App\InterviewQuestion
なので、次のようになります。
$factory->define(\App\InterviewQuestion::class, ...