我的表格中有一个enum
列,我试图在下拉列表中输出我在表格中设置的值。首先,我编写了此查询以获取column_type
和column_name
"SELECT `COLUMN_NAME`,`DATA_TYPE`,`COLUMN_TYPE` FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE `TABLE_SCHEMA`='devsbh' AND `TABLE_NAME`='modules' AND `COLUMN_NAME` NOT IN ('created_at', 'updated_at')"
然后我这样做是为了得到像这样的枚举值
<?php
$regex = "/'(.*?)'/";
preg_match_all( $regex , $modules->COLUMN_TYPE , $enum_array );
$enum_fields = $enum_array[1];
?>
我显示如此
PS:使用laravel的刀片模板引擎。
{!! Form::select($modules->COLUMN_NAME,$enum_fields) !!}
直到这里,一切都是正确的。当我尝试存储它时,尝试也保存为Y =&gt; 0和N =&gt; 1.我怎样才能获得密钥=&gt;值与枚举值相同?
根据控制台$enum_fields
的值为[0] =&gt; Y,[1] =&gt; N。
答案 0 :(得分:0)
将枚举硬编码到代码库中可能会更好。
假设您正在使用MySQL,枚举背后的想法实际上是将列中的值限制为特定的集合 - 基本上说“如果值不是这些字符串之一,则不允许它。”。
枚举不是经常被设计的(如果有的话) - 实际上,如果你试图改变它们,你可能会发现问题 - 它可能需要一些数据库体操来改变它们,特别是如果你有很多记录。
如果您的“查找”数据将发生变化,并且您需要将其存储为数据库,请将该列作为包含查找字段的另一个表的外键。
如果您坚持使用枚举,只需在下拉列表中对列表进行硬编码。
答案 1 :(得分:0)
您可以使用array_combine
方法使密钥和数组的值相同,这样就可以了
<?php
$regex = "/'(.*?)'/";
preg_match_all( $regex , $modules->COLUMN_TYPE , $enum_array );
$keyValueSame = array_combine($enum_array[1],$enum_array[1]);
?>
现在$ keyValueSame数组的键和值将具有相同的值。
根据控制台的$ keyValueSame的值是[Y] =&gt; Y,[N] =&gt; N。