Php 如何使用字符串或viceversa映射枚举以保存到数据库中?

Php 如何使用字符串或viceversa映射枚举以保存到数据库中?,php,cakephp,Php,Cakephp,我的数据库中有一个column say代理,它可以有枚举值('G','Y','M'),其中 G=谷歌 Y=雅虎 M=msn 我应该如何将来自我的函数的输出映射到我的代码中,即google作为G,以便数据库识别并保存它???我认为最简单的方法是获取枚举值的int表示形式。枚举是背景中的数字,因此通常很容易将枚举成员强制转换为数字,反之亦然 您可以编写一个转换器类,以获得最佳灵活性。您可以处理枚举值并生成字符串,或者获取字符串并返回枚举成员。您可以在一个简单的if-then-else或switch-

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


我应该如何将来自我的函数的输出映射到我的代码中,即google作为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"];

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

您已经在使用枚举数据类型,它们只是一个整数。为什么不(在DB模式中定义ENUM),只定义ENUM('Google','Yahoo','MSN',…)?这就是我要做的——然后,当你拉/推数据时,你可以只使用文本枚举值(当你从数据库抓取数据时,PHP会把它当作一个字符串,MySQL会把从PHP传递的字符串当作枚举类型,假设它是相同的)

没有理由用“G”而不是“Google”,除非你真的是一个懒惰的打字员。如果你那么懒,为什么不必要地要在代码中加入另一层间接寻址呢


编辑:很抱歉这篇文章的语气——它比预期的要严厉得多。我恰好强烈反对不必要的间接操作。

您已经在使用枚举数据类型,它们只是一个整数。为什么不(在DB模式中定义ENUM),只定义ENUM('Google','Yahoo','MSN',…)?这就是我要做的——然后,当你拉/推数据时,你可以只使用文本枚举值(当你从数据库抓取数据时,PHP会把它当作一个字符串,MySQL会把从PHP传递的字符串当作枚举类型,假设它是相同的)

没有理由用“G”而不是“Google”,除非你真的是一个懒惰的打字员。如果你那么懒,为什么不必要地要在代码中加入另一层间接寻址呢


编辑:很抱歉这篇文章的语气——它比预期的要严厉得多。我恰好强烈反对不必要的间接操作。

因为Cake不支持枚举,所以您可能希望使用tinyint(2)字段和以下方法:


它更快、更易于维护,还可用于(自定义)烘焙模板。

由于Cake不支持枚举,您可能希望使用tinyint(2)字段,这种方法:

它更快、更易于维护,还可用于(自定义)烘焙模板