我在我的数据库中有一个可以有枚举值('G','Y','M')的coloumn say代理,其中G = google Y = yahoo M = msn
我应该如何将来自我的函数的输出映射为我的代码中的 G,以便数据库识别并保存它?
我认为最简单的方法是获取枚举值的 int 表示。枚举是背景中的数字,因此通常很容易将枚举成员转换为数字,反之亦然。
您可以编写一个转换器类以获得最佳灵活性。您可以处理枚举值并生成一个字符串,或者获取一个字符串并返回一个枚举成员。您可以在一个简单的 if-then-else 或 switch-case 结构中做到这一点。
如果您使用的是 .NET (C#),请注意,即使您指定了枚举,也可以将任何数字作为参数传递,因此在转换时必须使用 else 或默认分支。
如果您使用的是PHP,这是一个示例:
$myEnum = array ("red" => 1,"blue" => 2,"yellow" => 3);
$d = $myEnum["red"];
你会得到 1 红色, 3 黄色。如果要使用字符串:
$myEnum = array ("Google" => "G","Yahoo" => "Y","MSN" => "M");
$d = $myEnum["Google"];
您已经在使用 ENUM 数据类型,它们只是一个整数。为什么不(在您定义 ENUM 的 DB 模式中)只定义 ENUM('Google','Yahoo','MSN', ...)?这就是我所做的——然后,当您拉/推数据时,您可以只使用文字枚举值(当您从数据库中获取数据时,PHP 会将其视为字符串,而 MySQL 将处理从 PHP 传递的字符串作为枚举类型,假设它是相同的)。
真的没有理由使用“G”而不是“Google”,除非你真的是一个懒惰的打字员。如果你那么懒惰,你为什么要在你的代码中添加另一层间接层,这是不必要的?
编辑:很抱歉这篇文章的语气——它比预期的要严厉得多。我只是碰巧强烈反对不必要的间接。
由于 Cake 不支持枚举,您可能需要使用 tinyint(2) 字段和这种方法: http: //www.dereuromark.de/2010/06/24/static-enums-or-semihardcoded-attributes/
它更快、更容易维护,并且还可以与您的(自定义)烘焙模板一起使用。