2017-04-16 36 views
0

我有一个enum列在我的表中,我想摆脱我在表中设置的值下拉。所以,首先我写了这个查询来获取column_typecolumn_name来自mysql表的枚举值

"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 => 0且N => 1。如何获得与枚举值相同的key =>值?

根据控制台的$enum_fields的值是[0] => Y,[1] => N。

回答

0

你可能更好的是将枚举硬编码到你的代码库中。

假设您使用的是MySQL,枚举背后的想法实际上是将列中的值限制为一个特定的集合 - 基本上说“如果该值不是这些字符串之一,不允许它”。

枚举并非设计为经常更改(如果有的话) - 事实上,如果您试图改变它,可能会发现问题 - 可能需要一些数据库体操来更改它们,特别是如果您有大量记录。

如果您的“查找”数据将发生变化,并且您需要将其存储为数据库,请将该列作为包含查找字段的另一个表的外键。

如果您遇到枚举,只需在下拉列表中对列表进行硬编码。

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] => Y,[N] => N。