【发布时间】:2015-08-05 09:06:22
【问题描述】:
在我的应用程序中,我想在不丢失数据的情况下将一对多转换为多对多:
来自:
/**
* @ORM\ManyToOne(targetEntity="\AppBundle\Entity\FoodAnalytics\Recipe", inversedBy="medias")
* @ORM\JoinColumn(name="recipeId", referencedColumnName="id", onDelete="CASCADE")
*/
protected $recipe;
到:
/**
* @ORM\ManyToMany(targetEntity="\AppBundle\Entity\FoodAnalytics\Recipe", inversedBy="medias")
* @ORM\JoinTable(
* name="media_recipes",
* joinColumns={@ORM\JoinColumn(name="mediaId", referencedColumnName="id", onDelete="CASCADE")},
* inverseJoinColumns={@ORM\JoinColumn(name="recipeId", referencedColumnName="id", onDelete="CASCADE")}
* )
*/
protected $recipes;
当我转储我的理论 shema 更新时,它说它会删除数据,而不是我想要的:
CREATE TABLE media_recipes (mediaId INT UNSIGNED NOT NULL, recipeId INT UNSIGNED NOT NULL, INDEX IDX_C2BE64FC27D9F5AC (mediaId), INDEX IDX_C2BE64FC6DCBA54 (recipeId), PRIMARY KEY(mediaId, recipeId)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB;
ALTER TABLE media_recipes ADD CONSTRAINT FK_C2BE64FC27D9F5AC FOREIGN KEY (mediaId) REFERENCES media (id) ON DELETE CASCADE;
ALTER TABLE media_recipes ADD CONSTRAINT FK_C2BE64FC6DCBA54 FOREIGN KEY (recipeId) REFERENCES Recipe (id) ON DELETE CASCADE;
ALTER TABLE media DROP FOREIGN KEY FK_6A2CA10C6DCBA54;
DROP INDEX IDX_6A2CA10C6DCBA54 ON media;
ALTER TABLE media DROP recipeId;
Process finished with exit code 0 at 13:04:46.
Execution time: 5 003 ms.
我该如何解决这个问题?即是否将配方表的先前 mysql mediaId 列与配方 ID 一起添加到新的 media_recipe 表中?
【问题讨论】:
-
你应该使用 DoctrineMigrationsBundle 来更新生产模式
-
我已经安装了它,但它真的可以将一对多转换为多对多吗?如果有,你知道具体的命令吗?
-
请阅读文档,关于从实体和现有数据库的差异创建迁移文件
-
完成,工作正常,谢谢!
标签: mysql symfony doctrine-orm doctrine entity-relationship