2016-03-25 3 views
4

laravelにbit(byte)と類似のデータベースがありますが、ドキュメントに何も見つかりませんでした。 (https://laravel.com/docs/5.1/migrations)。 、あなただけの代わりに、整数およびビット単位の演算子を使用することができ、手間のビットはで動作するようになる代わりに、BITデータ型を使用しようとしているのLaravelにデータを渡すタイプ移行時のビット/バイトタイプ

00000001 -> stands for something lets say playstation 

00000010 -> stands for xbox 

00000011 -> stands for both above 
+0

http://stackoverflow.com/questions/27704052/laravel-4-2bit-datatype-issueこの質問に変更があったとは思わない。 –

答えて

2

、:

は、私のような何かをしよう1つのフィールドに32以上のオプションが必要でないと仮定します(bigint = 8バイト= 32ビット)。

非常に単純な例として、次の列挙型クラスを作成する想像:

class Bitmask { 
    const ATARI  = 1 << 0; // 00000001 (1) 
    const NES   = 1 << 1; // 00000010 (2) 
    const SNES  = 1 << 2; // 00000100 (4) 
    const SEGA  = 1 << 3; // 00001000 (8) 
    const PLAYSTATION = 1 << 4; // 00010000 (16) 
    const XBOX  = 1 << 5; // 00100000 (32) 
} 

をフィールドを設定するには、すべてを行う必要がある、この構成では(一緒に論理和(ビットマスクを追加することです|を)それらは、同じです)。ユーザーがNESとPLAYSTATIONを持っている場合:

$user->systems = Bitmask::NES + Bitmask::PLAYSTATION; 

質問するには、ビット演算子を使用します。あなたはプレイステーションやXBOXesを持っているユーザーが望んでいた場合は

User::where('systems', '&', Bitmask::SEGA)->get(); 

を::だから、あなたはセガを持っているユーザーが望んでいた場合

User::where('systems', '&', Bitmask::PLAYSTATION | Bitmask::XBOX)->get(); 

&演算子は整数フィールドの間でビット単位のAND演算を実行し、あなたが渡す整数。いずれかのビットが一致した場合、&演算子は値> 0を返し、where句は真実になります。一致するビットが1つもない場合、&演算子は0を返し、where句はfalseになります。

+0

FYI、「ちょっとした面倒な作業... "、言い訳は意図していません。 :) – patricus

+0

@AlexOxilgこれを受け入れられた回答から削除した特別な理由はありますか? – patricus

関連する問題