在Laravel工厂,与“生产”有什么区别;“国家”;及;“定义”是什么;?
在拉威尔的工厂里,使用方法在Laravel工厂,与“生产”有什么区别;“国家”;及;“定义”是什么;?,laravel,laravel-seeding,Laravel,Laravel Seeding,在拉威尔的工厂里,使用方法state和方法defineAs有什么区别 state只是基本方法的扩展,而defineAs是一个完全不同的定义吗?你能举一些例子让它更容易理解吗 方法状态和定义的用途完全不同 定义和定义 您可以使用define方法为模型注册工厂,该方法由类和回调提供。例如,如果您正在为用户模型创建一个工厂,那么您可以这样注册它: $factory->define(App\User::class, function (Faker $faker) { // set valu
state
和方法defineAs
有什么区别
state
只是基本方法的扩展,而defineAs
是一个完全不同的定义吗?你能举一些例子让它更容易理解吗 方法状态
和定义
的用途完全不同
定义
和定义
您可以使用define
方法为模型注册工厂,该方法由类和回调提供。例如,如果您正在为用户
模型创建一个工厂,那么您可以这样注册它:
$factory->define(App\User::class, function (Faker $faker) {
// set values here
});
factory('user')->make();
$factory->define(App\User::class, function ($faker) {
return [
'name' => $faker->name,
'email' => $faker->email,
'password' => str_random(10),
'remember_token' => str_random(10),
'admin' => false,
];
});
$factory->defineAs(App\User::class, 'admin', function ($faker) use ($factory) {
$user = $factory->raw(App\User::class);
return array_merge($user, ['admin' => true]);
});
$factory->state(App\User::class, 'address', function ($faker) {
return [
'admin' => true,
];
});
factory(App\User::class)->states('admin', 'disable')->create()
然后你会这样给工厂打电话:
factory(App\User::class)->make();
但是,有时您可能希望使用名称而不是类来注册工厂,以便可以这样调用工厂:
$factory->define(App\User::class, function (Faker $faker) {
// set values here
});
factory('user')->make();
$factory->define(App\User::class, function ($faker) {
return [
'name' => $faker->name,
'email' => $faker->email,
'password' => str_random(10),
'remember_token' => str_random(10),
'admin' => false,
];
});
$factory->defineAs(App\User::class, 'admin', function ($faker) use ($factory) {
$user = $factory->raw(App\User::class);
return array_merge($user, ['admin' => true]);
});
$factory->state(App\User::class, 'address', function ($faker) {
return [
'admin' => true,
];
});
factory(App\User::class)->states('admin', 'disable')->create()
这就是defineAs
的作用:defineAs
接受类(例如:App\User::class
)和名称。例如:
$factory->define(App\User::class, 'user', function (Faker $faker) {
// set values here
});
defineAs
没有文档记录,但您可以在中找到它
工厂国家 用于生成具有一组特定属性的模型: 状态允许您定义可应用于模型工厂的任意组合的离散修改 例如,您的
用户
模型可能有一个额外的is_admin
字段,用于确定用户是否为管理员。您可以创建一个状态,以允许作为管理员的用户通过工厂生成
首先定义您的状态(其中admin
是名称):
然后,在生成用户时,您将进入admin
状态:
factory(App\User::class)->states('admin')->make();
这意味着您的
用户
模型可以有一个工厂,支持多种不同类型的用户;您可以在同一工厂内为被禁止的用户或拥有与其帐户关联的图片的用户创建状态。这是非常有益的,因为这意味着开发人员在使用工厂时不需要关心底层结构,并且如果底层结构发生变化(例如:is\u admin
变成administrator\u at
)只有工厂需要更改。之前的答案是defineAs
类似于别名或简写名称,但它是错误的!如果您做出以下决定:
factory('user')->create(); //it won't work
定义
和状态基本相同,只是略有不同。
在5.2之前的版本中,状态称为状态
因此,在创建模型时,defineAs
会根据原始模型创建不同的模型类型,以设置如下常见属性:
$factory->define(App\User::class, function (Faker $faker) {
// set values here
});
factory('user')->make();
$factory->define(App\User::class, function ($faker) {
return [
'name' => $faker->name,
'email' => $faker->email,
'password' => str_random(10),
'remember_token' => str_random(10),
'admin' => false,
];
});
$factory->defineAs(App\User::class, 'admin', function ($faker) use ($factory) {
$user = $factory->raw(App\User::class);
return array_merge($user, ['admin' => true]);
});
$factory->state(App\User::class, 'address', function ($faker) {
return [
'admin' => true,
];
});
factory(App\User::class)->states('admin', 'disable')->create()
而州
也在做同样的事情,但方式更好,如下所示:
$factory->define(App\User::class, function (Faker $faker) {
// set values here
});
factory('user')->make();
$factory->define(App\User::class, function ($faker) {
return [
'name' => $faker->name,
'email' => $faker->email,
'password' => str_random(10),
'remember_token' => str_random(10),
'admin' => false,
];
});
$factory->defineAs(App\User::class, 'admin', function ($faker) use ($factory) {
$user = $factory->raw(App\User::class);
return array_merge($user, ['admin' => true]);
});
$factory->state(App\User::class, 'address', function ($faker) {
return [
'admin' => true,
];
});
factory(App\User::class)->states('admin', 'disable')->create()
或者即使没有回调,也只是一个数组:
$factory->state(App\User::class, 'address', [
'admin' => true,
});
另一个区别是,define
在对象在数据库中持久化后触发一个调用的事件(afterCreating),而states
将触发一个事件afterCreatingState
。
此外,您还可以创建具有以下多种状态的对象:
$factory->define(App\User::class, function (Faker $faker) {
// set values here
});
factory('user')->make();
$factory->define(App\User::class, function ($faker) {
return [
'name' => $faker->name,
'email' => $faker->email,
'password' => str_random(10),
'remember_token' => str_random(10),
'admin' => false,
];
});
$factory->defineAs(App\User::class, 'admin', function ($faker) use ($factory) {
$user = $factory->raw(App\User::class);
return array_merge($user, ['admin' => true]);
});
$factory->state(App\User::class, 'address', function ($faker) {
return [
'admin' => true,
];
});
factory(App\User::class)->states('admin', 'disable')->create()
正确的用法是
factory(User::class,'admin')->make()
,而不是factory('admin')->make()
@MaksimIvanov你完全正确,但这是他写的<代码>工厂('admin')->make()是您想要做的,而工厂(User::class,'admin')->make()
是您要做的,我的困惑是关于->状态&->状态
。谢谢。定义方法在Laravel 7.x中被删除。见: