我正在填充数据库表。表中有一些是enum字段。使用多个值填充数据库字段
考虑其中有一个字段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。
你举的例子是不错,问题是这些字段是基于动态配置的(它可以是n之一)。所以我们不能限制它。 –
我已经使用另一个示例更新了代码以阐明预期结果。这个例子是你正在寻找的动态配置吗? –
谢谢,正如我所提到的,你不能指望角色/状态是领域。我只是举了一个粗略的例子。考虑根据不同的表格来改变字段的名称。 –