2017-04-16 57 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。