Veritabanına kaydetmek için dize veya tam tersi ile enum Haritayı nasıl?

3 Cevap php

I have in my database a coloumn say agent which can have enum values ('G','Y','M') where G= google Y= yahoo M= msn

veritabanı tanımak ve onu kaydeder, böylece nasıl ben çıkış kodumu G olarak benim işlevi yani google dan gelen harita gerekir?

3 Cevap

Ben kolay yolu get the int representation of the enum value olduğunu düşünüyorum. Numaralamalar arka planda numaraları, bu nedenle bir dizi ve tersi bir enum üye döküm genellikle kolaydır.

Sen, en iyi esneklik için converter class yazabilirsiniz. Sen numaralama değeri işlemek ve bir dize oluşturmak veya bir dize almak ve bir enum üye dönebilirsiniz. Bir basit if-then-else veya switch-case yapısını yapabilirsiniz.

Eğer. NET (C #) kullanıyorsanız, hatta bir enum belirttiğiniz bir parametre olarak herhangi bir sayı geçmesi farkında olmak, bu yüzden başka bir ya da varsayılan bir şube dönüşüm halinde bir zorunluluktur.

Eğer kullanıyorsanız PHP, burada bir örnek:

 $myEnum = array ("red" => 1,"blue" => 2,"yellow" => 3); 
 $d = $myEnum["red"];

Sen sarı için kırmızı, 3 için 1 alacaksınız. Eğer bir dize kullanmak istiyorsanız:

$myEnum = array ("Google" => "G","Yahoo" => "Y","MSN" => "M"); 
$d = $myEnum["Google"];

Zaten sadece bir tamsayı ENUM veri türlerini kullanarak ediyoruz. Neden (DB şema, sen ENUM tanımlıyorsunuz), sadece (..., 'Google', 'Yahoo', 'MSN') ENUM tanımlamak değil? Ben ne - Eğer veri bastırıyor / çekiyorsun o zaman, sadece (Eğer db veri kapmak zaman PHP bir dize gibi tedavi edecek, ve MySQL PHP geçti dize tedavi edecek değişmez numaralama değeri kullanabilirsiniz enum türü olarak) aynı varsayıyoruz.

Eğer gerçekten bir daktilo bu tembel değilseniz, 'Google' aşkın 'G' kullanmak için hiçbir sebep yoktur. Ve sen tembel, neden gereksiz yere, sizin koduna yönlendirme başka bir katman koymak isterim ki eğer?

Edit: yazının tonu için üzgünüm - bu kadar fazla sert amaçlanan daha çıktı. Ben sadece gereksiz üçkâğıtla karşı oldukça güçlü hissediyorum olur.

Since Cake does not support enums, you might want to use tinyint(2) fields and this approach: http://www.dereuromark.de/2010/06/24/static-enums-or-semihardcoded-attributes/

Bu, daha hızlı korumak daha kolaydır ve aynı zamanda (özel) fırında şablonları ile çalışır.