Я работаю над приложением, состоящим из Leads
, каждый Lead
-> hasMany ->
Fields
. Мое приложение примет infinite
количество whitelisted
полей. У некоторых Leads
будет много Fields
, у других может быть около 5. Из-за этого я выбрал Field
таблицу вертикальной, а не помещающейся во все поля, которые я принимаю по горизонтали, а затем столкнулся с ошибками MySQL. линия (таблица слишком широкая и т. д.)
Вот моя структура:
Ведущий стол
id
...
Таблица полей:
id
lead_id
field_name
field_value
Я создал фабрику моделей для моей модели Lead
, которая автоматически создает 5
случайные поля, используя Faker
.
У меня есть массив полей texts
, numbers
, dates
(и т. Д.), Которые принимает мое приложение.
Field Factory:
...
$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
на вертикальном столе, используя фабрику?
E.g.
Минимальное количество полей
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% знаю, с какими данными я работаю, поэтому проверка x
количества дубликатов, как мне кажется, была бы кошмаром.