在doctrine2中你用什么来代替ENUM?
在 Doctrine2 中你用什么来代替 ENUM?小整数?我想过使用varchar,或者显式定义char,但这对于索引来说可能不是很有效,还是我错了?
What do you use instead of ENUM in Doctrine2? smallint? I thought of using varchar, or explicitly define char, but this may not be very effective when it comes to indexes, or am I wrong?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
我通常使用映射到类常量的整数,就像
这样工作得很好,并且使得在 IDE 中使用您所谓的 ENUMS 变得更加容易。
您还可以 使用可枚举类型,如下所述通过文档,但这意味着您必须为每个枚举列定义一种自定义类型。这是大量的工作,但没有真正的好处。
您可能还想知道为什么您应该'并没有真正使用枚举。
I usually work with integers mapped to class constants, like
That works quite fine and makes it even easier to work with what you would call ENUMS in an IDE.
You can also use an enumerable type as described by the documentation, but that means you will have to define one custom type per enum column. That's a lot of work with no real benefit.
You may also want to know why you shouldn't really use enums.
Postgres、Symfony、ORM、Doctrine...
Postgres:定义新类型枚举 (pgAdmin)
在实体中
在 config.yml 中
Postgres, Symfony, ORM, Doctrine...
Postgres: Define new type enum (pgAdmin)
In Entity
In config.yml
如果您想要使用 MySQL 和 Symfony 的 MySQL ENUM,您现在可以使用一种简单的方法,无需任何依赖项,
为所有枚举使用基类:
针对您的特殊情况扩展它:
将其添加到您的 dcotrine.yml 配置文件中:
在中使用它您的实体文件作为学说列文档类型:
您最终将获得一个干净的 MySQL ENUM 类型来表示列状态:
If you want MySQL ENUMs using MySQL and Symfony, you can now use an easy way for that without any dependencies
use a base class for all enums:
extend it for your special case:
add it to your dcotrine.yml config file:
use it in your entity file as doctrine column doc type:
And you will end up with a clean MySQL ENUM type for column status:
使用 symfony 时,您应该使用 fre5h/DoctrineEnumBundle 作为原则:
使用示例
为新的ENUM类型BasketballPositionType创建一个类:
在config.yml中为Doctrine注册BasketballPositionType:
创建一个具有位置字段的Player实体:
现在您可以在某个动作或其他地方设置玩家的位置:
You should use fre5h/DoctrineEnumBundle for doctrine when using symfony:
Example of using
Create a class for new ENUM type BasketballPositionType:
Register BasketballPositionType for Doctrine in config.yml:
Create a Player entity that has a position field:
Now you can set a position for Player inside some action or somewhere else: