doctrine:migrations:diff给出“在映射信息中没有检测到任何变化”

时间:2018-01-15 08:25:08

标签: php symfony doctrine-orm doctrine

我正在将学说与symfony结合使用。对于数据库设置,我正在使用注释。我成功创建了一个表,但为字段integer提供了错误的格式city,我需要将其更改为string。我的理解是,当我从

更改客户类中的注释时
class Customer{

  /**
   * @ORM\Column(type="integer", nullable=true)
   * @var string city
   */
  private $city;

}

class Customer{

  /**
   * @ORM\Column(nullable=true)
   * @var string city
   */
  private $city;

}

然后运行

php bin/console doctrine:migrations:diff

应该识别映射的所有更改,并且应该生成包含ALTER TABLE查询或类似信息的php文件。但是,此命令会回复“映射信息中未检测到任何更改”。我错过了什么?

7 个答案:

答案 0 :(得分:5)

我需要用

清除缓存
php bin/console doctrine:cache:clear-metadata 

第一。成功了!

答案 1 :(得分:3)

您应该将注释@Entity添加到要在学说ORM中被识别为实体的实体。

<?php

/**
 * Customer
 *
 * @ORM\Table(name="customers")
 * @ORM\Entity(repositoryClass="YourBundle/Repository/YourRepositoryName")
 */
class Customer{

       /**
        * @ORM\Column(type="string", nullable=true)
        * @var string city
        */
        private $city;

}

您还可以使用此命令自动生成具有不同所需注释的实体:

bin/console doctrine:generate:entity

答案 2 :(得分:1)

当您的映射无效时,也会发生这种情况。

一个快速的解决方法是

php bin/console doctrine:schema:validate

然后修复错误,直到看到为止

[OK] The mapping files are correct.

现在再次制作php bin/console doctrine:migrations:diff,它应该可以工作。

答案 3 :(得分:0)

如果您使用复杂的Symfony配置,请在doctrine.orm.entity_managers.default.mappings中检查config.yml配置值。可能你不得不在这里添加你的新捆绑包。

答案 4 :(得分:0)

如果它可以帮助其他人,对我来说,这只是我的实体类中设置的名称空间有问题。

我从另一个包中复制了一个实体,却忘记了更新命名空间。

答案 5 :(得分:0)

我的问题是我已将实体放在捆绑 Doctrine 文件夹中,但必须将其放入实体文件夹中。

答案 6 :(得分:0)

就我而言,我必须添加 --from-empty-schema 标志。

doctrine:migrations:diff --from-empty-schema