我的数据库中有一个文本字段,并为前10个字符设置了索引。如何在我的原则实体中指定这一点?
我在任何地方都找不到数据库特定的索引选项的任何信息:/
这是我的“部分”MySQL create语句:
KEY `sourceaddr_index` (`sourceaddr`(10)),这是我的“教义索引”:
@ORM\Index(name="sourceaddr_index", columns={"sourceaddr"}, options={}), 这不会影响正常的使用,但我注意到了在将开发部署到新的膝上型计算机和基于我的实体创建数据库时的问题.
如能提供任何帮助,将不胜感激:)
发布于 2016-12-04 21:14:41
在MySQL中手动创建索引之后,我很幸运地在Doctrine中命名了索引。它既不漂亮,也不优雅,如果您忘记重新创建索引,它很容易导致错误从dev迁移到生产。但是,教义似乎理解它尊重它。
在我的实体中,我有以下定义。教义忽视了长度选择--这是我一厢情愿的想法。
/**
* Field
*
* @ORM\Table(name="field", indexes={
* @ORM\Index(name="field_value_bt", columns={"value"}, options={"length": 100})
* })在MySQL中,我执行
CREATE INDEX field_value_bt ON field (value(100))据我所见,只要名称相同,Doctrine就会将索引单独保留。
发布于 2019-05-05 13:57:21
可能因为Doctrine2.9,请参阅:https://github.com/doctrine/dbal/pull/2412
@Index(name="slug", columns={"slug"}, options={"lengths": {191}})不幸的是,Doctrine在空格位置上似乎非常挑剔,因此,例如update --dump-sql产生了:
DROP INDEX slug ON wp_terms;
CREATE INDEX slug ON wp_terms (slug(191));即使您执行这些消息,它们也将保持在那里(用MariaDB 10.3.14进行测试)。
发布于 2015-09-12 15:56:36
简而言之:您不能将其设置在Doctrine中。Doctrine的ORM专门关注跨供应商的可压缩性,您所描述的索引类型虽然在许多现代RDBMS中得到了支持,但在某种程度上超出了Doctrine的处理范围。
不幸的是,如果您使用Doctrine的模式更新程序(在Symfony中将是php app/console doctrine:schema:update --force),就像手动更新数据库一样,Doctrine有时也会倒退,以保持同步。
在我需要这样的东西的情况下,我只是设置了一个夹具,它通过SQL发送相关的ALTER TABLE语句。如果要分发代码(例如,它可能运行在其他/旧的数据库上),可以用站台检查包装语句以确保。
这并不理想,但一旦你的应用程序/软件稳定下来,像这样的问题就不应该经常发生。
https://stackoverflow.com/questions/32539973
复制相似问题