gpt4 book ai didi

laravel - 在 Laravel 工厂中, "state"和 "defineAs"有什么区别?

转载 作者:行者123 更新时间:2023-12-04 13:21:55 25 4
gpt4 key购买 nike

在 Laravel 的工厂中,使用方法 state 有何不同?和方法 defineAs ?

state只是基本方法的扩展和 defineAs完全不同的定义?你能举一些例子让大家更容易理解吗?

最佳答案

方法 statedefineAs服务于完全不同的目的。
definedefineAs
您可以使用 define 为模型注册工厂。您为类和回调提供的方法。例如,如果您正在为 User 创建工厂。模型然后你会像这样注册它:

$factory->define(App\User::class, function (Faker $faker) {
// set values here
});

然后你会像这样调用工厂:
factory(App\User::class)->make();

但是,有时您可能希望使用名称而不是类来注册工厂,以便您可以像这样调用工厂:
factory('user')->make();

那就是 defineAs进来: defineAs接受一个类(例如: App\User::class )和一个名称。例如:
$factory->define(App\User::class, 'user', function (Faker $faker) {
// set values here
});
defineAs没有记录,但您可以在 Eloquent source 中找到它.

工厂状态

Factory States用于生成具有特定属性集的模型:

States allow you to define discrete modifications that can be applied to your model factories in any combination.



例如,您的 User模型可能有一个额外的 is_admin确定用户是否为管理员的字段。您可以创建一个状态以允许通过工厂生成管理员用户。

首先定义您的状态(其中 admin 是名称):
$factory->state(App\User::class, 'admin', [
'is_admin' => true,
]);

然后在生成用户时传入 admin状态:
factory(App\User::class)->states('admin')->make();

这意味着您可以为您的 User 建立一个工厂。支持多种不同类型用户的模型;您可以为被禁止的用户或拥有与其帐户关联的图片的用户创建一个状态,所有这些用户都在同一个工厂内。这是额外的好处,因为这意味着开发人员在使用工厂时不需要关心底层结构,如果底层结构发生变化(例如: is_admin 变成 administrator_at )只需要更改工厂。

关于laravel - 在 Laravel 工厂中, "state"和 "defineAs"有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49979511/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com