【问题标题】:Laravel give data Type bit/byte in migrationLaravel 在迁移中给出数据类型位/字节
【发布时间】:2016-03-26 16:13:58
【问题描述】:

laravel中是否有类似bit(byte)的数据库,在文档中找不到。 (https://laravel.com/docs/5.1/migrations)。

我尝试做类似的事情:

00000001 -> stands for something lets say playstation

00000010 -> stands for xbox

00000011 -> stands for both above

【问题讨论】:

标签: php database laravel byte bit


【解决方案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)
}

要设置字段,您只需将位掩码添加在一起(在此配置中,ORing (|) 它们是相同的)。如果用户有 NES 和 PLAYSTATION:

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

要查询,您将使用按位运算符。因此,如果您想要拥有 SEGA 的用户:

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

如果您想要拥有 PLAYSTATION 或 XBOX 的用户:

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

&amp; 运算符将在整数字段和您传入的整数之间执行按位与运算。如果任何位匹配,&amp; 运算符将返回一个 > 0 的值,而 where 子句将说实话。如果没有一个位匹配,&amp; 运算符将返回 0,where 子句将为 false。

【讨论】:

  • 仅供参考,“使用起来有点麻烦......”,没有双关语的意思。 :)
  • @AlexOxilg 有什么特殊原因将其从接受的答案中删除?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-25
  • 1970-01-01
  • 2016-01-02
  • 2016-01-01
  • 2017-01-26
  • 2014-06-23
  • 2023-04-06
相关资源
最近更新 更多