来自mysql表

时间:2017-04-16 19:26:42

标签: php mysql laravel enums

我的表格中有一个enum列,我试图在下拉列表中输出我在表格中设置的值。首先,我编写了此查询以获取column_typecolumn_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。

2 个答案:

答案 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。