、:
は、私のような何かをしよう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になります。
http://stackoverflow.com/questions/27704052/laravel-4-2bit-datatype-issueこの質問に変更があったとは思わない。 –