首页 > 解决方案 > 更改后,Symfony 实体不会在数据库中更新

问题描述

我的 symfony 应用程序使用 Doctrine 在 mysql 中持久化实体。

今天我更新了我的实体“广告商”和“报告”,因此两者之间存在关系 - 正如这篇文章中所建议的:当使用 EntityType 显示选择时,无法从 Symfony 表单中保存实体

当我尝试创建迁移时,它说数据库已经同步。

php bin/console make:migration

返回:[警告] 未检测到数据库更改。数据库架构和应用程序映射信息已经同步。

但是,如果我查看报告的表格,我发现它仍然具有旧架构:

+---------------+------------+------+-----+---------+----------------+
| Field         | Type       | Null | Key | Default | Extra          |
+---------------+------------+------+-----+---------+----------------+
| id            | int(11)    | NO   | PRI | NULL    | auto_increment |
| advertiser_id | int(11)    | NO   | MUL | NULL    |                |
| start_date    | date       | NO   |     | NULL    |                |
| end_date      | date       | NO   |     | NULL    |                |
| deleted       | tinyint(1) | NO   |     | NULL    |                |
+---------------+------------+------+-----+---------+----------------+

即使我的实体现在看起来像这样:

class Report
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\Column(type="date")
     */
    private $start_date;

    /**
     * @ORM\Column(type="date")
     */
    private $end_date;

    /**
     * @ORM\Column(type="boolean")
     */
    private $deleted;

    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\Advertiser", inversedBy="reports")
     * @ORM\JoinColumn(nullable=false)
     */
    private $advertiser;

    public function getId(): ?int
    {
        return $this->id;
    }

    public function getStartDate(): ?\DateTimeInterface
    {
        return $this->start_date;
    }

    public function setStartDate(\DateTimeInterface $start_date): self
    {
        $this->start_date = $start_date;

        return $this;
    }

    public function getEndDate(): ?\DateTimeInterface
    {
        return $this->end_date;
    }

    public function setEndDate(\DateTimeInterface $end_date): self
    {
        $this->end_date = $end_date;

        return $this;
    }


    public function getDeleted(): ?bool
    {
        return $this->deleted;
    }

    public function setDeleted(bool $deleted): self
    {
        $this->deleted = $deleted;

        return $this;
    }

    public function getAdvertiser(): ?Advertiser
    {
        return $this->advertiser;
    }

    public function setAdvertiser(?Advertiser $advertiser): self
    {
        $this->advertiser = $advertiser;

        return $this;
    }
}

我一直在寻找解决方案并尝试过这些,但没有运气:

php bin/console doctrine:cache:clear-metadata
php bin/console doctrine:schema:update --force

如果您对如何使用更新的架构更新数据库有任何建议,请告诉我。

标签: symfonydoctrine-orm

解决方案


作为多对一关系,您是数据库广告客户列通常只将报告的键存储为“链接”,这就是为什么 Symfony 在您的数据库中看不到任何更改的原因。

也许你也可以使用:

php bin/console doctrine:schema:update --dump-sql 

查看数据库中的更改

php bin/console doctrine:schema:update --force 

在不使用迁移的情况下应用更改


推荐阅读