skovachev / fakefactory
一个针对Laravel 4的模型工厂包,提供丰富的API来创建定制的虚拟对象
Requires
- php: >=5.3.0
- doctrine/dbal: 2.4.x
- fzaninotto/faker: 1.3.*@dev
- illuminate/support: ~4
Requires (Dev)
- mockery/mockery: dev-master@dev
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
属性设置为admin或client。此外,它还告诉它模型表上存在一个不包含外键的关系。在这种情况下,外键将在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文件。
贡献
请随时发送建议和功能请求。让我们使这个包变得很棒!