【发布时间】:2018-08-20 20:02:19
【问题描述】:
我正在开发由Leads 组成的应用程序,每个Lead -> hasMany -> Fields。我的应用程序将接受 infinite 数量的 whitelisted 字段。一些Leads 将有很多Fields,其他可能有5 个左右。因此,我选择了Field 表格是垂直的,而不是适合我水平接受的所有字段,并且然后遇到 MySQL 错误(表太宽等)
这是我的结构:
领导表
id
...
字段表:
id
lead_id
field_name
field_value
我为我的Lead 模型创建了一个模型工厂,它使用Faker 自动创建5 随机字段。
我有一个我的应用程序接受的texts、numbers、dates(等)字段数组。
现场工厂:
...
$texts = config('fields.whitelist.text');
foreach ($texts as $text) {
$fields[$text] = $faker->sentence();
}
...
$randomField = array_random(array_keys($fields));
return [
'field_name' => $randomField,
'field_value' => $fields[$randomField],
];
我一直在这样做:
$lead = factory(Lead::class)->create()
->each(function ($l) {
$l->fields()->save(factory(Field::class, 5)->make());
});
但是,我现在有一个 minimum 数组 Fields,每个 Lead 都必须有。我在另一个配置中有这些 minimum 字段。
是否可以使用工厂在垂直表上自动创建x 最小值Fields?
例如
最小字段
first_name
date_of_birth
如何编写工厂自动创建以下结构:
[
'field_name' => 'first_name',
'field_value' => '<random name>',
],
[
'field_name' => 'date_of_birth',
'field_value' => '<random date>',
],
编辑:如果可能,不要插入重复的field_name 值。不像是 100% 破坏交易,但我想确保我 100% 知道我正在使用什么数据,所以检查x 我想的重复数将是一场噩梦
【问题讨论】:
标签: php laravel laravel-5.6 laravel-testing