Как отобразить enum со строкой или наоборот, чтобы сохранить в базе данных? - PullRequest
0 голосов
/ 29 марта 2009

В моей базе данных есть столбец сказать агент, который может иметь значения перечисления ('G', 'Y', 'M'), где G = Google Y = Yahoo M = MSN

как мне отобразить вывод, полученный из моей функции, т.е. google как G, в моем коде, чтобы база данных распознала его и сохранила ??

Ответы [ 3 ]

3 голосов
/ 29 марта 2009

Я думаю, что самый простой способ - получить представление типа int для значения enum . Перечисления - это числа на заднем плане, поэтому обычно легко привести член перечисления к числу и наоборот.

Вы можете написать класс конвертера для лучшей гибкости. Вы можете обработать значение перечисления и сгенерировать строку или получить строку и вернуть член перечисления. Вы можете сделать это в простой структуре 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"];
0 голосов
/ 18 января 2013

Поскольку Cake не поддерживает перечисления, вы можете использовать поля tinyint (2) и этот подход: http://www.dereuromark.de/2010/06/24/static-enums-or-semihardcoded-attributes/

Это быстрее, проще в обслуживании, а также работает с вашими (пользовательскими) шаблонами выпечки.

0 голосов
/ 29 марта 2009

Вы уже используете типы данных ENUM, которые являются целым числом. Почему бы не (в вашей схеме БД, где вы определяете ENUM), просто определите ENUM («Google», «Yahoo», «MSN», ...)? Это то, что я делаю - тогда, когда вы извлекаете / толкаете данные, вы можете просто использовать буквальное значение enum (PHP будет обрабатывать его как строку, когда вы извлекаете данные из БД, а MySQL будет обрабатывать строку, переданную из PHP в качестве типа enum, предполагая, что это то же самое).

Нет никакой причины использовать «G» вместо «Google», если только вы не слишком ленивы из машинистки. И если вы такой ленивый, почему вы хотите добавить в свой код еще один уровень косвенности?

Редактировать: Извините за тон поста - он вышел гораздо более резким, чем предполагалось. Я просто чувствую себя довольно сильно против ненужной косвенности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...