我最近更新了我的3个实体-我们将其称为EntityA,EntityB和EntityC。现在,我无法从EntityB和EntityC中检索数据或删除记录。我可以插入和更新。 EntityA仍然可以正常工作。
更改如下:
我将一列从int更新为bigint并更改了EntityA上的索引。
我更新了EntityB和EntityC的索引。 EntityC也有一些新列。
EntityB和EntityC都具有链接到EntityA的ID的外键约束。我正在使用manyToOne关系:
/**
* @var \Application\Entity\User
*
* @ORM\ManyToOne(targetEntity="Application\Entity\User")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="user_id", referencedColumnName="id", nullable=true)
* })
*/
private $user;
我刚刚看到另一个有关验证模式的问题的评论,并且在使用orm:validate-schema
之后,我的数据库确实存在同步问题:
[映射]确定-映射文件正确。
[数据库]失败-数据库架构与当前映射文件不同步。
我使用orm:schema-tool:update --force
来解决此问题:
[映射]确定-映射文件正确。
[数据库]正常-数据库架构与映射文件同步。
此后,我使用以下命令清除了所有3个缓存:
orm:clear-cache:query
orm:clear-cache:metadata
orm:clear-cache:result
知道为什么我仍然无法从EntityB和EntityC访问数据吗?
编辑
我是新手,我手动更新了可能引起此问题的数据库和实体。我应该导出数据,删除表,删除实体,重新创建所有实体并将数据导入回来吗?将来应该如何更新数据库和实体?
编辑2
我还应该提到,在进行上面列出的更改之前,一切工作都很好,并且更改不包括外键约束。一切从一开始就存在。再次查看代码,我意识到删除实际上可能有效,但是在尝试检索记录时,代码在到达那里之前失败:
$this->entityManager->getRepository(EntityC::class)->findOneBySomeField($details['someField']);