styde / factory
使用类和方法而不是闭包来生成和构建 Laravel 的模型工厂
Requires
- php: >= 5.6.4
- fzaninotto/faker: ~1.4
- laravel/framework: ~5.4
This package is auto-updated.
Last update: 2024-09-06 09:34:36 UTC
README
此包允许您使用类和方法而不是闭包来为 Laravel 5.4 构建 model 工厂。
如何安装
通过运行 composer require styde/factory:"dev-master" --dev
或将 "styde/factory": "dev-master"
添加到项目 composer.json 文件中的 dev 依赖项 (require-dev
) 并然后运行 composer update 来安装。
然后在 "database" 目录内创建一个 "factory-classes" 目录,并在您的 composer.json 文件中的 "autoload-dev" 部分添加以下内容
"autoload-dev": {
"classmap": [
"database/factory-classes",
然后在控制台执行 composer dump-autoload
。
注意:您可以将工厂类放在任何您想要的位置,当然,如果您愿意,也可以使用 PSR-4。
警告:Laravel 在测试周期内多次加载 database/factories/。由于您无法覆盖类,这将导致冲突。因此,请勿在 database/factories 目录中放置工厂类,除非您完全确定您没有使用 factory
辅助函数。
创建工厂类
工厂类具有以下结构
<?php
class UserFactory extends Styde\Factory\Factory
{
protected $model = 'App\User';
public function data()
{
return [
/***/
];
}
}
您可以给工厂类命名,但需要扩展 Styde\Factory\Factory
您还需要定义 $model
属性,并将其分配给您想创建的模型名称(例如:App\User
)。
您还需要添加一个 data()
方法,该方法将返回一个包含此模型工厂默认属性的数组
示例
public function data()
{
return [
'first_name' => $this->firstName,
'last_name' => $this->lastName,
'username' => $this->unique()->userName,
'email' => $this->unique()->safeEmail,
'remember_token' => str_random(10),
];
}
请注意,在此情况下 $this-
是 $this->faker-
的代理
状态
由于我们现在使用类,状态变为工厂类内的简单方法
public function stateDelinquent()
{
return ['account_status' => 'delinquent'];
}
注意,这些方法需要以 "state" 前缀开头,并需要返回相应的属性。
用法
使用工厂类 您将不会使用工厂助手,而是可以编写以下内容
UserFactory::create()
以创建一个新的用户并将其注册到数据库中。
其他示例
-
UserFactory::make()
创建一个新用户,但不将其持久化到数据库中。 -
UserFactory::times(3)->create()
创建 3 个用户并将它们持久化到数据库中。 -
UserFactory::delinquent()->create()
创建一个具有违约状态的用户(遵循先前的关于状态的示例)。
此包处于开发中:将添加更多测试、功能和稳定版本。
如果您想合作,请在此 GitHub 上发送拉取请求或报告问题。