【问题标题】:Doctrine doctrine:schema:update command produces the same set of queries again and again教义教义:模式:更新命令一次又一次地产生相同的查询集
【发布时间】:2015-10-21 13:15:17
【问题描述】:

我使用 Doctrine 2.2.3 和 Symfony 2.0.12,我遇到了 Doctrine 问题,当我启动doctrine:schema:update 时,它​​会一次又一次地产生相同的查询集,如下所示:

ALTER TABLE Testimonial CHANGE frontPage frontPage TINYINT(1) NOT NULL;
ALTER TABLE Slider CHANGE active active TINYINT(1) DEFAULT NULL;
ALTER TABLE LPSlider CHANGE active active TINYINT(1) DEFAULT NULL;
ALTER TABLE CustomerDesign CHANGE requestProof requestProof TINYINT(1) DEFAULT NULL, CHANGE isBlank isBlank TINYINT(1) DEFAULT NULL, CHANGE hidden hidden TINYINT(1) DEFAULT NULL;
ALTER TABLE SessionDesign CHANGE requestProof requestProof TINYINT(1) DEFAULT NULL, CHANGE isBlank isBlank TINYINT(1) DEFAULT NULL;

还有更多,如您所见,这只是“TINYINT(1) DEFAULT NULL”更改,如果我使用 --force 运行命令,它会成功更新架构:

Database schema updated successfully! "30" queries were executed

但是如果我再次运行教义:schema:update --dump-sql 它会显示相同的查询,我检查了数据库,所有这些字段都已经“TINYINT(1) DEFAULT NULL”。

我使用 PHP Entities 注解,例如:

/**
 * @var boolean $frontPage
 *
 * @ORM\Column(name="frontPage", type="boolean")
 */
private $frontPage;

我无法将 Doctrine 更新到 v2.3 或更高版本,它不适用于我的 Symfony 版本,更新 Symfony 可能真的很痛苦,因为这是一个非常庞大的项目。

更新:

我设法将应用程序升级到最新版本的 Symfony 2.7.5 和 Doctrine 2.5.1 并且仍然有同样的问题,尝试使用教义:架构:创建创建新数据库,但教义:架构:更新再次显示相同“TINYINT(1) NOT NULL”的变化。

【问题讨论】:

  • 请提供使用的数据库。
  • 数据库是MySql 5.5.42

标签: php mysql symfony doctrine-orm doctrine


【解决方案1】:

好的,我终于找到了问题,它在配置文件中,由于某种原因,tinyint 类型被手动映射到 smallint:

doctrine:
    dbal:
        driver:   %database_driver%
        host:     %database_host%
        port:     %database_port%
        dbname:   %database_name%
        user:     %database_user%
        password: %database_password%
        charset:  UTF8
        mapping_types:
            enum: string
            tinyint: smallint # this is what caused all the problems with booleand fields

【讨论】:

    【解决方案2】:

    我记得在我的一个项目中遇到了同样的问题。

    根据您回答中引用的注释,假设您拥有的大多数列都是布尔值。 MySQL 将布尔类型视为 TINYINT(1),当学说检查数据库模式以对其运行更新时,它会找到 TINYINT(1),因此总是生成相同的查询集。

    如果你想摆脱这个问题,希望这会有所帮助

    致谢:https://stackoverflow.com/a/4237773/2154099

    【讨论】:

    • 谢谢,我明天去看看!
    • @Vedmant 这个答案对你有用吗?请提供反馈。谢谢!
    • 不幸的是我找不到将字段类型设置为整数(1)的方法,它只支持 smallint。尝试使用 columnDefinition 设置字段,但结果相同。
    猜你喜欢
    • 2017-10-18
    • 1970-01-01
    • 2018-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多