symfony diff给予“在您的Map信息中未检测到更改”

slwdgvem  于 2022-11-16  发布在  其他
关注(0)|答案(9)|浏览(101)

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

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

应该识别Map的所有更改,并且应该生成一个包含ALTER TABLE查询或类似查询的php文件。2然而,此命令的回复是**“No changes detected in your mapping information”**。3我遗漏了什么?

dauxcl2d

dauxcl2d1#

我需要先清除该高速缓存

php bin/console doctrine:cache:clear-metadata

成功啦!

ztigrdn8

ztigrdn82#

您应该将注解@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
stszievb

stszievb3#

当Map无效时也可能发生这种情况。
快速解决方法是
php bin/console doctrine:schema:validate
然后修复错误,直到您看到
[OK] The mapping files are correct.
现在再次生成php bin/console doctrine:migrations:diff,它应该可以工作。

tyu7yeag

tyu7yeag4#

在我的例子中,我必须添加--from-empty-schema标志。

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

piztneat5#

如果你正在使用一个复杂的Symfony配置,检查config.yml中的doctrine.orm.entity_managers.default.mappings配置值。当它不工作时,你可能需要在这里添加你的新包。

jtjikinw

jtjikinw6#

如果它可以帮助其他人,对我来说,这只是一个错误的命名空间设置在我的实体类的问题。
我从另一个包中复制了一个实体,但忘记更新名称空间。

eyh26e7m

eyh26e7m7#

我的问题是,我已经把我的实体放在bundle Doctrine文件夹,但必须把它放在实体文件夹。

2o7dmzc5

2o7dmzc58#

类似于@agoldev,我需要清除该高速缓存。只是不是教义元数据缓存,而是symfony缓存。但他引导我找到了这个解决方案。

php bin/console cache:clear

然后就成功了。

xmd2e60i

xmd2e60i9#

在我的例子中,我在doctride配置文件中有Map类型'attribute',但是实体有注解。

相关问题