skovachev/fakefactory

一个针对Laravel 4的模型工厂包,提供丰富的API来创建定制的虚拟对象

1.0.0 2014-03-16 23:04 UTC

This package is auto-updated.

Last update: 2024-09-10 00:08:05 UTC


README

这是一个Laravel 4包,简化了生成虚拟数据模型的流程。它可以使您快速生成测试数据,或者仅用于UI审查而将数据填充到应用程序数据库。

安装

您需要将包添加到您的composer.json文件中。

"require-dev": {
    "skovachev/fakefactory": "dev-master"
}

然后您需要运行composer install来下载包内容并更新自动加载器。

安装完成后,您需要将服务提供者注册到您的应用程序中。打开app/config/app.php并添加以下内容以更新您的providers键。

'providers' => array(
    'Skovachev\Fakefactory\FakefactoryServiceProvider',
)

您还需要更新您的aliases键。

'aliases' => array(
    'Fakefactory' => 'Skovachev\Fakefactory\Facade',
)

就这些了。

请注意,此包需要Faker

Fakefactory

Fakefactory是您将主要使用的类。它负责为您的应用程序创建虚拟模型。当它被指示创建一个模型时,它将查询数据库以获取有关该模型属性和与其他模型关系的信息。基于这些信息以及由Faker对象提供的信息,它将创建一个模型实例。

用法

以下是几个如何使用Fakefactory创建模型实例的示例。

$user = Fakefactory::make('User');

上面的示例创建了一个User模型实例,但未将其保存到数据库中。要一次性创建并保存模型,请使用

$user = Fakefactory::create('User');

从数据库中提取模型数据

Fakefactory将尝试从数据库中提取有关您的模型的所有信息。它将提取列名和类型,并根据这些信息选择适当的价值生成方法。它还可以根据模型表上存在的外键确定任何相关模型。您可以通过编辑模块配置来编辑默认值生成规则。您需要运行以下代码将配置发布到您的配置文件夹

php artisan config:publish skovachev/fakefactory

ID生成

默认情况下,Fakefactory不会为您的模型生成ID属性。但是,这可以通过包的config.php文件或以下构建选项进行更改

$user = Fakefactory::generateId()->create('User');

此构建选项也可以用作一次性的配置覆盖。如果您默认启用了它,则可以禁用单个模型实例

$user = Fakefactory::generateId(false)->create('User');

覆盖属性

在某些情况下,您可能希望使用特定值覆盖某些属性,而不是使用工厂生成的虚拟值。您可以使用overrideAttributes构建选项来完成此操作。

$user = Fakefactory::overrideAttributes(['username' => 'foobar'])->make('User');

或者,您也可以在make / create方法中提供覆盖。

$user = Fakefactory::make('User', ['username' => 'foobar']);

生成关联模型

在某些情况下,您可能希望同时生成一个模型及其相关模型并将它们都插入。这可以通过with构建选项来完成。

$user = Fakefactory::with('posts')->make('User');

在上面的示例中,工厂将生成一个Post模型并将其附加到User模型上,基于它们的关系类型。您也可以通过嵌套类似的方式覆盖相关模型的属性,如下面的示例所示

$user = Fakefactory::with('posts')->make('User', [
	'username' => 'foobar',
	'posts' => [
		'title' => 'Fake title'
	]
]);

排除生成属性

在某些情况下,您可能希望不生成某些属性的值。在这种情况下,您可以使用excludeAttributes构建选项。

$user = Fakefactory::excludeAttributes('username')->make('User');

上面的代码将生成一个User模型实例,但不提供username属性的值。

伪造者

在某些情况下,Fakefactory可能无法从数据库中提取生成良好伪造实例所需的所有信息。在其他情况下,您可能希望对特定模型属性的伪造值生成有更多的控制。那么,您需要为您自己的类创建一个Faker对象。Faker对象提供了如何生成更接近您业务域的伪造模型的相关信息。

创建伪造者

一个简单的针对User模型的Faker对象可能看起来像这样

class UserFaker extends \Skovachev\Fakefactory\Faker
{
    protected $attributes = [
        'type' => ['randomElement', ['admin', 'client']]
    ];

    protected $relatedTo = ['posts'];
}

上面的代码将告诉Fakefactory类,当生成User模型时,需要将type属性设置为adminclient。此外,它还告诉它模型表上存在一个不包含外键的关系。在这种情况下,外键将在posts表上 - 例如user_id

默认伪造相关类

您可以通过指示您的模型中的一些关系应该默认伪造,而无需在创建伪造对象时指定with规则,来表示这一点

class UserFaker extends \Skovachev\Factory\Faker
{
    protected $with = ['account'];
}

将伪造者分配给类

然而,简单地创建类是不够的。您需要告诉Fakefactory在需要生成User模型时使用此Faker类。以下代码将Faker对象注册到Fakefactory

Fakefactory::registerClassFaker('User', 'UserFaker');

生成规则

Fakefactory包使用惊人的Faker包来生成假数据。它将从数据库中提取列名和类型,并使用相应的生成规则。例如,如果我们有一个类型为Integer的列,则工厂将使用以下Faker方法

$value = $faker->randomNumber(1, 10000);

如果我们有一个名为phone的列,则将使用phoneNumber方法。所有这些都可以在包的config.php文件中更改。

自定义规则

如果您想要为特定属性生成自定义规则,则需要有一个具有自定义方法的Faker类。让我们假设我们想要所有用户名都采用<random_number>_<random_string>的形式。我们的Faker类可能看起来像这样

class UserFaker extends \Skovachev\Fakefactory\Faker
{
    protected $attributes = [
        'username' => 'custom'
    ];

    public function getUsernameFakeValue($faker)
    {
        return $faker->randomNumber(1,1000) . '_' . $faker->lexify;
    }
}

$faker参数是提供Faker包所有生成能力的Faker\Generator对象实例。

您还可以直接从attributes数组中直接使用生成器提供的任何规则。如果您想使用的Faker\Generator方法期望参数,只需将它们作为方法名之后传递,并用'|'分隔。例如,要生成3段文本,您需要使用paragraphs方法。您的属性数组可能看起来像这样

protected $attributes = [
    'text' => 'paragraphs|3'
];

许可证

Fakefactory根据MIT许可证发布。有关详细信息,请参阅捆绑的LICENSE文件。

贡献

请随时发送建议和功能请求。让我们使这个包变得很棒!