2013-11-28 171 views
3

当我使用doctrine:schema:update命令行生成表时,看起来Doctrine(或Symfony?)想要引入重新排列列的命令,将键它会出现在前面。我想知道是否有希望在哪里禁用环境的这个“特性”,所以当我去创建表格时,它们会按照我输入它们的顺序保存。Symfony/Doctrine重新排列数据库列

我已经四处寻找这个问题,但似乎没有其他人从我已经能够提出,并且我不确定什么捆绑/部分的教条或Symfony我需要改变它不希望重新排列我的表格。任何有关该软件包的哪一部分将包含该逻辑的信息,或者我可以添加哪些选项来进行修改将不胜感激,因为目前为止我无法在文档中找到任何内容。

更新: 我做了一些调查,我发现一个类似于我的溢出问题,但不是很完美。在我的情况下,我没有使用新的数据类型,只有向前移动的列是我指定的键(主键或外键)。它引发的命令看起来与此非常相似,只不过它是对我的每一个键都执行的。

ALTER TABLE product_price CHANGE price price DECIMAL(10,2) DEFAULT NULL 

Doctrine custom type always altering table

更新2: 下.orm.yml格式下运行MySQL:所要求的其他信息。

想要设置的字段始终是关键字段,在将它们更改回我想要/需要它们的顺序后,它会觉得需要每次重新排列列。

我不改变任何关于田地;它在初始创建时以及每当我需要运行模式更新时都执行此操作,而不对这些特定字段进行任何更改。

+0

我从来没有见过坚持重新整理我的专栏的教条。你使用什么DBMS和版本?是否有可能某些细节在列和属性映射之间有所不同,例如,如果您更改了精度,可空性或默认值? –

+0

做了doctrine:schema:更新在运行ALTER TABLE语句后停止抱怨,还是一直反复提示相同的SQL语句。什么是您的映射配置(注释或.yml结构)。简而言之:需要更多信息才能了解您的情况。;-) –

+0

在主要问题中增加了更多信息,希望现在已经足够了,如果不让我知道还需要什么,我会添加我所能做的。 – Gyhth

回答

1

我做了一点挖掘,我不认为你可以在这个任何控制:

https://github.com/doctrine/dbal/blob/master/lib/Doctrine/DBAL/Schema/Table.php#L555

来看这个,顺序是PK,FK,等栏目,在该订单。 很难扫描原始逻辑的页面,所以我可能错过了某些东西,但从我可以告诉它没有采取任何配置来决定顺序。

+0

我不确定这是否是问题,因为问题源于学说添加一个ALTER TABLE

CHANGE ...,并且我没有看到类似于此类中的任何行。偶然,我错过了你链接的东西? – Gyhth

+1

你可能想看看平台特定的类。他们是SQL被编译的地方。 – Flosculus

+0

我认为你的答案合并是问题。在我看来,它试图将我的主键作为我的第一列,将外键作为第二列,然后让其他列按照他们的意愿出现。问题在于dbal/lib/Doctrine/DBAL/Platforms/MySqlPlatform.php中的getAlterTableSQL()函数必须调用您在某个时候提到的getColumns,注意我的表并不按照它想要的顺序,然后尝试根据它想要的那样重新排列它们以获得列。 – Gyhth

1

我认为你应该使用这些方法中的一种生产

  • 运行应用程序/控制台学说:架构:更新自卸SQL和SQL运行manualy
  • 与DoctrineMigrationBundle使用迁移或类似的东西 Liquibase
+0

我已经完成了其中的一个,但我更关心某种推理/理性,为什么我需要这样做,为什么学说希望改变我的数据库的布局以开始用。而且,希望还有另一种方法来设置一个选项,让它不这样做。尽管如此,我的确欣赏这一点。 – Gyhth