【问题标题】:Integrity constraint violation: 1451 Cannot delete or update a parent row: a foreign key constraint fails - doctrine完整性约束违规:1451 无法删除或更新父行:外键约束失败 - 教义
【发布时间】:2022-09-23 21:10:07
【问题描述】:

我的用户代码:-

$projects = $this->doctrine->getRepository(Project::class)->findBy([\'deletionDate\' => new DateTime(\'today + 364 day\')]);

foreach($projects as $project){
    $project = $this->entityManager->find(\'App\\Entity\\Project\', $project->getId());
    $this->entityManager->remove($project);
}
$this->entityManager->flush();

这是错误:

An exception occurred while executing a query: SQLSTATE[23000]: Integrity constraint violation: 1451 Cannot delete or update a parent row: a foreign key constraint fails (`foo`.`entry`, CONSTRAINT `FK_2B219D70166D1F9C` FOREIGN KEY (`project_id`) REFERENCES `project` (`id`)) 

这就是我正在尝试的: -

class Entry
{
   /**
     * @ORM\\ManyToOne(targetEntity=Project::class, inversedBy=\"entries\")
     * @ORM\\JoinColumn(name=\"project_id\", referencedColumnName=\"id\", onDelete=\"CASCADE\")
     *
     * @Assert\\NotBlank
    */
    public ?Project $project;
}

class Project
{
  /**
  * @ORM\\OneToMany(targetEntity=\"Entry\", mappedBy=\"project\", cascade={\"remove\"})
  */
  public Collection $entries;

}

    标签: symfony doctrine


    【解决方案1】:

    这与 Doctrine 本身无关,而是与一般数据库规则有关 - 您不能删除数据库中其他行所依赖的行。

    现在,引起我注意的是:

    @ORM\JoinColumn(name="project_id", referencedColumnName="id", onDelete="CASCADE")
    

    也就是说,你有onDelete="CASCADE",但是:

    `FK_2B219D70166D1F9C` FOREIGN KEY (`project_id`) REFERENCES `project` (`id`)) 
    

    告诉我们一个完全不同的故事。

    您的数据库和模型似乎不同步。您是否通过迁移来管理它?如果是这样,您是否运行了所有这些?

    您可以尝试:

    php bin/console doctrine:migrations:diff
    

    这将生成一个包含所有差异的迁移。

    请注意,检查检测到的更改并在进行任何必要的调整后应用它们。

    【讨论】:

    • 您是否通过迁移来管理它? - 我的数据库是从 sql 转储生成的。即使删除了onDelete="CASCADE",我仍然遇到同样的错误
    猜你喜欢
    • 2020-08-10
    • 2019-10-24
    • 2021-10-12
    • 1970-01-01
    • 2021-06-14
    • 2018-05-21
    • 1970-01-01
    • 2014-03-12
    相关资源
    最近更新 更多