styde/factory

使用类和方法而不是闭包来生成和构建 Laravel 的模型工厂

dev-master 2018-01-17 11:32 UTC

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 上发送拉取请求或报告问题。