anahkiasen / fakable
允许创建和播种假 Eloquent 模型
Requires
- php: >=5.4.0
- fzaninotto/faker: ~1.4
- illuminate/support: ~4
- symfony/yaml: ~2.6
Requires (Dev)
- illuminate/database: ~4.2
- mockery/mockery: ~0.9
- phpunit/phpunit: ~4.4
README
此包已弃用且将不再维护,我建议使用 Factory Muffin 代替
Fakable
允许创建和播种假 Eloquent 模型。这是一个 PHP 5.4+ 包。
可用于测试或生成种子中的假条目批量。
安装
$ composer require anahkiasen/fakable:dev-master
使用方法
基本使用
只需将特性添加到模型中,例如
use Fakable\FakableModel; class MyModel extends Eloquent { use FakableModel; }
内置了许多默认值,用于配置哪些属性将被分配给哪些属性,但您可以通过修改模型上的 $fakable
属性来覆盖或添加到这些值
class User extends Eloquent { /** * The fakable attributes * * @var array */ protected $fakables = array( 'nationality' => 'countryCode', 'timzeone' => ['numberBetween', [1, 415]], ); }
Fakable 在下面使用 Faker,因此您可以通过传递方法名或数组 ['method', [argument, argument]]
(如上所示)来调用 Faker 的任何方法。
从那时起,您可以在模型上调用多个方法来生成假实例
> User::fake()->toArray(); array( 'id' => 28, 'name' => 'Tempore ipsa aut dolorum sit quod.', 'slug' => 'tempore-ipsa-aut-dolorum-sit-quod', 'age' => 23, 'biography' => 'Culpa debitis dolorem quidem eius. Quis et voluptatibus est. Quia nulla rerum expedita magnam.', 'email' => 'nienow.donnie@spinkawisoky.com', 'website' => 'http://www.weissnat.com/', 'address' => '91274 Schmitt Light Suite 378', 'country' => 'Sudan', 'city' => 'North Twila', 'private' => false, 'nationality' => 'RU' )
您也可以通过调用 fakeMultiple(attributes, min, max)
来生成多个模型
User::fakeMultiple(array( 'name' => 'foobar', ), 5, 10); User::count() // 7
高级使用
要更精确地控制生成的假模型的流程,您可以这样做
User::fakable()
这将返回一个可以从其中设置各种选项的 Fakable 实例
User::fakable() ->setPool(10, 20) // Will generate 10 to 20 entries ->setPoolFromModel('Discussion', 2) // Will generate 2 users for every discussion ->setSaved(false) // Won't save anything to the database ->fakeModel() // Generated a single fake model, that's what ::fake() calls ->fakeMultiple() // Generate multiple models from the pool set previously
在假模型上设置属性
您还可以设置可能不是随机的假模型的属性
User::fakable()->fakeMultiple(array( 'gender' => 'Male', ));
属性固定值
您不仅可以设置模型上的所有属性,还可以创建一个属性固定值文件来保存它们。此文件可以放在任何位置,可以是 PHP、YAML 或 JSON 文件。您可以通过将 Fakable\Fakable::$baseFixture
变量设置为路径来告诉 Fakable 在设置种子时或应用启动时在哪里找到它。
Fakable\Fakable::$baseFixture = app_path().'/tests/fixtures/fakable.yml';
例如,您还可以为特定的 Fakable 实例设置不同的文件
User::fakable()->setFixture(__DIR__.'/fixtures/user.json')->fakeModel()
该文件是一个简单的数组 [class => attributes],例如
User: name: 'name' age: ['numberBetween', [0, 20]]
关系
Fakable 也会在可能的情况下生成关系。大多数情况下,这是一个完全自动的过程,您只需将关系的名称添加到 fakable 属性中,并传递一个空签名即可。
protected $fakables = array( 'discussions' => [], );
您可以选择传递一个最小值和/或最大值来生成生成的关系数量。
protected $fakables = array( 'discussions' => [10, 20], );
请注意,目前这不适合 Has-type 关系:Fakable 只能从接收者的点进行生成(即 Belongs-type 关系)。
您唯一需要配置的关系是 morphTo
关系,因为,嗯,猜测它们的行为很痛苦。
class Image extends Eloquent { protected $fakables = array( 'illustrable' => [ 'relationType' => 'MorphTo', 'forModels' => ['User', 'Discussion'] ], ); }
在这里,relationType
将告诉 Fakable 这是一个 MorphTo 关系,而 forModels
将指示它 Image 可能是何种模型的多态关系。
默认情况下,Fakable 将使用属性名作为外键(因此 illustrable
将查找 illustrable_type
和 illustrable_id
),但您也可以在签名中传递一个 foreignKey
来指定。
class Image extends Eloquent { protected $fakables = array( 'illustrable' => [ 'foreignKey' => 'imageable', 'relationType' => 'MorphTo', 'forModels' => ['User', 'Discussion'] ], ); }