Laravel 6.12 播种厂看不到状态
Laravel 6.12 seeding factory don't see states
像往常一样,该项目需要种子。
和往常一样,我创建了一个 UserFactory,设置它,添加到 DatabasesSeeder 并发现了一个错误。
InvalidArgumentException : Unable to locate [models] state for [App\Models\User]
但默认工厂(我的意思是 $factory->define(User::class, function (Faker $faker)
)工作正常
UserTableSeeder.php
use Illuminate\Database\Seeder;
use App\Models\User;
class UserTableSeeder extends Seeder
{
public function run()
{
factory(User::class, 50)->state('models')->create();
factory(User::class, 50)->create();
}
}
UserFactory.php
use App\Models\User;
use Faker\Generator as Faker;
use Illuminate\Support\Str;
$factory->define(User::class, function (Faker $faker) {
//everything works fine here
});
$factory->defineAs(User::class, 'models', function (Faker $faker) {
//exactly the same return except for a few string values
//but 'Unable to locate [models] state for [App\Models\User]'
});
好的。我能够在我的环境中重现错误。这就是问题所在。你给你的工厂起了名字 models
,但称它为一个州。 $factory->defineAs(未记录)没有定义带有状态的工厂,只是为您的工厂命名。 工厂状态 和命名工厂(您的) 是两个不同的东西。这就是为什么您不能像 State Factory.
那样为您的数据库播种
factory(User::class, 50)->state('models')->create();
如果要使用$factory->defineAs
功能,将上面的行替换为
factory(User::class,'models', 50)->create();
或
(推荐 - 因为它有据可查) 如果您仍然希望能够使用 ->state('models')
(states) 为您的数据库播种,则更改你的UserFactory.php
如下
use App\Models\User;
use Faker\Generator as Faker;
use Illuminate\Support\Str;
$factory->define(User::class, function (Faker $faker) {
//everything works fine here
});
$factory->state(User::class, 'models', function (Faker $faker) {
//exactly the same return except for a few string values
//but 'Unable to locate [models] state for [App\Models\User]'
});
备注:您现在使用 $factory->state
而不是 $factory->defineAs
来定义您的第二个工厂。
像往常一样,该项目需要种子。 和往常一样,我创建了一个 UserFactory,设置它,添加到 DatabasesSeeder 并发现了一个错误。
InvalidArgumentException : Unable to locate [models] state for [App\Models\User]
但默认工厂(我的意思是 $factory->define(User::class, function (Faker $faker)
)工作正常
UserTableSeeder.php
use Illuminate\Database\Seeder;
use App\Models\User;
class UserTableSeeder extends Seeder
{
public function run()
{
factory(User::class, 50)->state('models')->create();
factory(User::class, 50)->create();
}
}
UserFactory.php
use App\Models\User;
use Faker\Generator as Faker;
use Illuminate\Support\Str;
$factory->define(User::class, function (Faker $faker) {
//everything works fine here
});
$factory->defineAs(User::class, 'models', function (Faker $faker) {
//exactly the same return except for a few string values
//but 'Unable to locate [models] state for [App\Models\User]'
});
好的。我能够在我的环境中重现错误。这就是问题所在。你给你的工厂起了名字 models
,但称它为一个州。 $factory->defineAs(未记录)没有定义带有状态的工厂,只是为您的工厂命名。 工厂状态 和命名工厂(您的) 是两个不同的东西。这就是为什么您不能像 State Factory.
factory(User::class, 50)->state('models')->create();
如果要使用$factory->defineAs
功能,将上面的行替换为
factory(User::class,'models', 50)->create();
或
(推荐 - 因为它有据可查) 如果您仍然希望能够使用 ->state('models')
(states) 为您的数据库播种,则更改你的UserFactory.php
如下
use App\Models\User;
use Faker\Generator as Faker;
use Illuminate\Support\Str;
$factory->define(User::class, function (Faker $faker) {
//everything works fine here
});
$factory->state(User::class, 'models', function (Faker $faker) {
//exactly the same return except for a few string values
//but 'Unable to locate [models] state for [App\Models\User]'
});
备注:您现在使用 $factory->state
而不是 $factory->defineAs
来定义您的第二个工厂。