【问题标题】:enum values from mysql tablemysql表中的枚举值
【发布时间】:2017-04-16 19:26:42
【问题描述】:

我的表中有一个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 => 0 和 N => 1。如何获得与枚举值相同的键 => 值?

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

【问题讨论】:

    标签: php mysql laravel enums


    【解决方案1】:

    你可以使用array_combine方法让数组的key和value一样

    <?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。

    【讨论】:

      【解决方案2】:

      您最好将枚举硬编码到您的代码库中。

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

      枚举并不是为了经常改变而设计的(如果有的话)——事实上,如果你尝试改变它,你可能会发现问题——它可能需要一些数据库操作来改变它们,尤其是在你有很多记录的情况下。

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多