Doctrine 重命名我所有的索引,即使我不要求它

Doctrine rename all my index even if i don't ask for it

我是 doctrine 和 Symfony 的新手,我不明白为什么我的迁移总是包含一些用于重命名索引的行。

我更喜欢为我的索引保留一个可读的语义名称,我应该使用哪个选项?

这是我用来创建迁移的命令:

php bin/console make:migration

这是我的实体:


/**
 * ArticleFournisseur
 *
 * @ORM\Table(name="article_fournisseur")
 * @ORM\Entity
 */
class ArticleFournisseur
{
    /**
     * @var int|null
     *
     * @ORM\Column(name="Qte", type="integer", nullable=true)
     */
    private $qte;

    /**
     * @var float|null
     *
     * @ORM\Column(name="Prix_unitaire", type="float", precision=10, scale=0, nullable=true)
     */
    private $prixUnitaire;

    /**
     * @var \Article
     *
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="NONE")
     * @ORM\OneToOne(targetEntity="Article")
     * @ORM\JoinColumn(name="no_article", referencedColumnName="no_article")
     */
    private $NoArticle;

    /**
     * @var \Emplacement
     *
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="NONE")
     * @ORM\OneToOne(targetEntity="Emplacement")
     * @ORM\JoinColumn(name="Id_emplacement", referencedColumnName="Id_emplacement")
     */
    private $idEmplacement;

    /**
     * @var \Fournisseur
     *
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="NONE")
     * @ORM\OneToOne(targetEntity="Fournisseur")
     * @ORM\JoinColumn(name="Id_fournisseur", referencedColumnName="Id_fournisseur")
     */
    private $idFournisseur;

    /**
     * @var \Statut
     *
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="NONE")
     * @ORM\ManyToOne(targetEntity="Statut")
     * @ORM\JoinColumn(name="Id_statut", referencedColumnName="Id_Statut")
     */
    private $idStatut;
}

这是我在生成的迁移文件中得到的部分结果:

// ./migrations/Version202007211565895.php
public function up(Schema $schema) : void
{
    // this up() migration is auto-generated, please modify it to your needs
    $this->addSql('ALTER TABLE article_fournisseur RENAME INDEX fk_art_fou__art TO IDX_AC1DA055BC2E22B2');
    $this->addSql('ALTER TABLE article_fournisseur RENAME INDEX fk_art_fou__emplacement TO IDX_AC1DA05515B9D0D9');
    $this->addSql('ALTER TABLE article_fournisseur RENAME INDEX fk_art_fou__fou TO IDX_AC1DA055E3E87F1D');
    $this->addSql('ALTER TABLE article_fournisseur RENAME INDEX fk_art_fou__statut TO IDX_AC1DA05541A2C7F1');

我只是做了一件特别的事情,我使用以下命令从我的数据库创建了我的实体:

php bin/console doctrine:mapping:import "App\Entity" annotation --path=src/Entity

感谢您的帮助

编辑:

好的,现在重命名索引的行已经消失了,但我仍然遇到与外键名称相同的问题。 请你看看这个:

// ./migrations/Version2020072194047.php

    public function up(Schema $schema) : void
    {
        // this up() migration is auto-generated, please modify it to your needs
        $this->addSql('ALTER TABLE article_fournisseur DROP FOREIGN KEY fk_art_fou__statut');
        $this->addSql('ALTER TABLE article_fournisseur ADD CONSTRAINT FK_AC1DA055BC2E22B2 FOREIGN KEY (no_article) REFERENCES article (no_article)');

看,外键约束被删除,然后用另一个名称重新创建。

但也许我必须为此创建另一个问题?

Doctrine 允许命名索引(参见docs)。

例如:

/**
 * ArticleFournisseur
 *
 * @ORM\Table(name="article_fournisseur",indexes={@Index(name="idx_idEmplacement", columns={"idEmplacement"})})
 * @ORM\Entity
 */

您可以根据需要进行调整。