symfony - 更改后,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
如果您对如何使用更新的架构更新数据库有任何建议,请告诉我。
解决方案
作为多对一关系,您是数据库广告客户列通常只将报告的键存储为“链接”,这就是为什么 Symfony 在您的数据库中看不到任何更改的原因。
也许你也可以使用:
php bin/console doctrine:schema:update --dump-sql
查看数据库中的更改
php bin/console doctrine:schema:update --force
在不使用迁移的情况下应用更改
推荐阅读
- r - 刻面自由刻度“y”不适用于双轴
- elasticsearch - 弹性搜索基于嵌套字段值应用提升
- html - 使用 CSS 对齐时间轴上的按钮时出现问题
- python - sklearn StackingClassifier 和样本权重
- python - 在 Local Outlier Factor 中定义 Minpts 参数
- amazon-web-services - 当我尝试更改它时,EC2 实例错误告诉我附加了多个 IAM 角色...?
- python - 根据样式过滤 Pandas DataFrame
- java - 如何在 Heroku 中使用外部库运行 Java/Maven 应用程序?
- c++ - 如何来回移动演员 虚幻引擎
- html - 隐藏多个 div 的跨度