php - Laravel 在迁移中给出数据类型 bit/byte

标签 php database laravel byte bit

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

最佳答案

与其尝试使用 BIT 数据类型,这会有点麻烦,您可以只使用整数和按位运算符,假设您不需要一个字段超过 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();

& 运算符将在整数字段和您传入的整数之间执行按位与运算。如果任何位匹配,& 运算符将返回值 > 0,where 子句将为真。如果所有位都不匹配,& 运算符将返回 0,where 子句将为 false。

关于php - Laravel 在迁移中给出数据类型 bit/byte,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36225328/

相关文章:

laravel - 用新的格式化数组替换相关的模型集合数组

php - 尝试使用一个表中的 id 值将两个表连接在一起

php - 如何将 PHP 和 JavaScript 字符串与引号连接起来以正确求值

database - 在vsql中垂直显示vertica记录

php - Laravel 依赖注入(inject) Auth::

php - Laravel 社交名媛 : Laravel\Socialite\Two\InvalidStateException

php - @param 在类里面是什么意思?

php - 在 phpmyadmin 中向用户添加文件权限

php - Sql从字符串中选择数据选择id

mysql - 灯 : How to Implement Scheduling?