【问题标题】:Doctrine 2 orm:validate-schema fails because of constraintDoctrine 2 orm:validate-schema 由于约束而失败
【发布时间】:2013-05-03 10:04:53
【问题描述】:

我有一个包含多个一对多/多对一关系的数据库。例如,我有一个名为 Student 的表,以及一个名为 StudentNotes 的相关表。 StudentNotes 表有一个名为 student_id 的外键。我希望外键对 delete = cascade 有约束。

我使用属性 @JoinColumn(on="CASCADE") 设置了我的 Doctrine 2 实体并更新了数据库架构。不幸的是,无论何时执行此操作,都会将 on delete 设置为“restrict”。我做错了什么?

这是来自我的学生实体的相关代码:

/**
 * @var Collection Notes
 * 
 * @OneToMany(targetEntity="StudentNotes", mappedBy="student")
 * @JoinColumn(onCascade="DELETE")
 */

protected $notes;

来自 StudentNotes:

 /**
 * @var \Entities\Students Student
 * 
 * @ManyToOne(targetEntity="Students", inversedBy="notes")
 * @OrderBy({"datetime"="DESC"})
 */

protected $student;

我什至尝试添加所有列信息(即,name="student_id"、referencedColumnName="id"),但没有任何改变。

编辑

我最初写这个时搞砸了:我写了@JoinColumn(onCascade="DELETE"),而我本来打算写@JoinColumn(onDelete="CASCADE")。无论哪种方式,这都无法正常工作:验证模式失败,因为数据库与模式不同步。

【问题讨论】:

    标签: doctrine-orm database-schema foreign-key-relationship cascade


    【解决方案1】:

    onCascade 不要exists,你需要onDelete="CASCADE"。

    @JoinColumn(onDelete="CASCADE")
    

    【讨论】:

    • 糟糕,这是一个印刷错误。我实际上使用过@JoinColumn(onDelete="CASCADE")。没有骰子。
    【解决方案2】:

    好的,我知道我忘记做什么了!

    我忽略了返回命令行并运行以下命令:

    php doctrine.php orm:schema-tool:update --force
    

    这成功了

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-22
      • 2011-04-07
      • 1970-01-01
      • 2012-01-22
      相关资源
      最近更新 更多