Я работаю над заполнением таблиц базы данных. В таблице есть поля, некоторые из которых перечислены.Заполнение поля базы данных с несколькими значениями
Рассмотрит пользователь, который имеет поле status
, значение которого может быть active
, inactive
и т.д. Предположат, что мы можем изменить значение конфигурации и запуск сценария данные могут быть заполнены соответствующим образом.
Представим user
таблицу, status
поле как
'status' => array(
'active' => 3,
'inactive',
'deleted',
),
В этом случае предположим, что мы должны создать 3 пользователей с status
, active
. 1 пользователь со статусом inactive
и 1 с deleted
.
В таблице может быть больше полей перечисления. Таким образом, конфигурация может расширяться. В зависимости от конфигурации и полей значения будут кратными.
Рассмотрите приведенный ниже пример.
Например:
$config = array(
'table1name' => array(
'field1' => array(
'active' => 3,
'inactive',
'deleted',
),
'field2' => array(
'admin',
'user',
'editor'
),
....,
'more-fields' => array(
'more-values',
)
),
'table2name' => array(
'field1' => array(
'active',
'inactive',
'deleted',
),
)
);
В этом случае необходимо заполнить table1
поле field1
которого с active
, inactive
, deleted
и roles
с admin
, user
, editor
и т.д. (активный, неактивный и т.д. предоставляются только для Например, это могут быть только значения.)
Идея состоит в том, чтобы генерировать больше пользователей в зависимости от количества, если таковое имеется.
Например:
'status' => array(
'active' => 10,
'inactive' => 2,
'deleted' => 3,
),
'roles' => array(
'admin' => 2,
'user',
'editor'
)
....,
'more-fields' => array(
'more-values',
)
Так что будут
10 * 4 => активных пользователей (10 * 2 активного администратора/10 активного пользователя, 10 активного редактора) + 2 * 4 = > неактивные пользователи (2 неактивных администратора, 1 пользователь, 1 редактор) + 3 * 4 => удаленных пользователей в общей сложности.
Я борюсь за построение алгоритма для того же.
array(
'status' => array(
'active' => 10,
'inactive' => 2,
'deleted' => 3,
),
'roles' => array(
'admin' => 2,
'user',
'editor'
),
....,
'more-fields' => array(
'more-values',
)
)
// In this example you can see we have not covered the fields of the table when they are more than 1 on save.It looks we need to build the array with values first.
foreach ($config as $table => $fields) {
foreach ($fields as $field => $values) {
foreach ($values as $key => $statusCount) {
if (is_string($key)) {
$model = new User();
$model->$field = $key;
$model->another = 'value';
$model->save();
} else {
for ($i = 0; $i< $statusCount; $i++) {
$model = new User();
$model->$field = $key;
$model->another = 'value';
$model->save();
}
}
}
}
}
UPDATE:
Изменения, сделанные в соответствии с @ в четвертой-птица ответ https://stackoverflow.com/a/33354032/487878
Проблема это выглядит только на 2-х полей, поля могут быть 1 или п.
Ваш пример хорошо, проблема в том, что поля имеют динамическую конфигурацию (она может быть от одного до n).Поэтому мы не могли его ограничить. –
Я обновил код другим примером, чтобы уточнить ожидаемые результаты. Является ли этот пример динамической конфигурацией, которую вы ищете? –
Спасибо, как я уже говорил, вы не можете ожидать, что роли/статус - это поля. Я просто привел пример. Рассмотрим название полей в соответствии с другой таблицей. –