Ric*_*d87 4 mysql symfony doctrine-orm
我的数据库中有一个文本字段,前10个字符在其上有一个索引。如何在我的学说实体中指定?
我在任何地方都找不到有关索引的数据库特定选项的任何信息:/
这是我的“部分” MySQL创建语句:
KEY `sourceaddr_index` (`sourceaddr`(10)),
Run Code Online (Sandbox Code Playgroud)
这是我的@Index原则:
@ORM\Index(name="sourceaddr_index", columns={"sourceaddr"}, options={}),
Run Code Online (Sandbox Code Playgroud)
这不会干扰常规使用,但是在将开发部署到新笔记本电脑上并基于我的实体创建数据库时,我注意到了问题。
任何帮助,将不胜感激 :)
自 Doctrine 2.9 起可能,请参阅:https : //github.com/doctrine/dbal/pull/2412
@Index(name="slug", columns={"slug"}, options={"lengths": {191}})
Run Code Online (Sandbox Code Playgroud)
不幸的是,Doctrine 似乎对空格位置非常挑剔,因此例如update --dump-sql产量:
DROP INDEX slug ON wp_terms;
CREATE INDEX slug ON wp_terms (slug(191));
Run Code Online (Sandbox Code Playgroud)
即使您执行这些,它们的消息也会保留在那里(使用 MariaDB 10.3.14 测试)。
在MySQL中手动创建索引后,我很幸运在Doctrine中命名了该索引。它不是漂亮或优雅的,并且如果您忘记重新创建索引,很容易导致从开发人员转移到生产人员的错误。但是,学说似乎理解它的尊重。
在我的实体中,我具有以下定义。主义忽略了长度选项-这是我的一厢情愿的想法。
/**
* Field
*
* @ORM\Table(name="field", indexes={
* @ORM\Index(name="field_value_bt", columns={"value"}, options={"length": 100})
* })
Run Code Online (Sandbox Code Playgroud)
在MySQL中,我执行
CREATE INDEX field_value_bt ON field (value(100))
Run Code Online (Sandbox Code Playgroud)
据我所知,Doctrine仅将索引命名为同名索引。
| 归档时间: |
|
| 查看次数: |
2935 次 |
| 最近记录: |