如何用字符串映射枚举或反之以便保存到数据库中?

时间:2009-03-29 10:21:49

标签: php cakephp

我在我的数据库中有一个coloumn say agent,它可以有枚举值('G','Y','M') G =谷歌 Y =雅虎 M = msn

我应该如何映射来自我的函数的输出,即谷歌作为我的代码中的G,以便数据库识别并保存它?

3 个答案:

答案 0 :(得分:3)

我认为最简单的方法是获取枚举值的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"];

答案 1 :(得分:0)

您已经在使用ENUM数据类型,它只是一个整数。为什么不(在您的数据库架构中,您定义ENUM),只需定义ENUM('Google','Yahoo','MSN',...)?这就是我所做的 - 然后,当你拉/推数据时,你可以只使用文字枚举值(当你从数据库中获取数据时,PHP将它视为一个字符串,MySQL会处理从PHP传递的字符串作为枚举类型,假设它是相同的。)

真的没有理由使用'G'而非'谷歌',除非你真是懒得打字员。如果你是那么懒,你为什么要不必要地在你的代码中加入另一层间接?

编辑:对不起该帖子的语气 - 它比预期更严厉。我碰巧强烈反对不必要的间接。

答案 2 :(得分:0)

由于Cake不支持枚举,您可能希望使用tinyint(2)字段和此方法: http://www.dereuromark.de/2010/06/24/static-enums-or-semihardcoded-attributes/

它更快,更易于维护,也适用于您的(自定义)烘焙模板。