【问题标题】:Fixtures and inheritance in SymfonySymfony 中的固件和继承
【发布时间】:2011-02-09 20:50:06
【问题描述】:

我在 Symfony 中有一个这样的数据库模式:

Persona:
    actAs: { Timestampable: ~ }
    columns:
      primer_nombre:  { type: string(255), notnull: true }
      segundo_nombre: { type: string(255) }
      apellido:   { type: string(255), notnull: true }
      rut:         { type: string(255) }
      email:       { type: string(255) }
      email2:      { type: string(255) } 
      direccion:     { type: string(400) }
      ciudad:        { type: string(255) }
      region:      { type: string(255) }
      pais:     { type: string(255) }
      telefono:       { type: string(255) }
      telefono2:      { type: string(255) }
      fecha_nacimiento:   { type: date }

Alumno:
 inheritance:
    type:          concrete
    extends:       Persona
 columns:
  comentario:  { type: string(255) }
  estado_pago: { type: string(255) }

Alumno_Beca:
 columns:
  persona_id:   { type: integer, primary: true }
  beca_id: { type: integer, primary: true }
 relations:
  Alumno: { onDelete: CASCADE, local: persona_id, foreign: id } 
  Beca: { onDelete: CASCADE, local: beca_id, foreign: id } 

Beca:
 columns:
  nombre:        { type: string(255) }
  monto:      { type: double }
  porcentaje:  { type: double }
  descripcion: { type: string(5000) }

如您所见,“alumno”从“persona”继承而来。现在我正在尝试为这两个表创建固定装置,但我无法让 Doctrine 加载它们。它给了我这个错误:

SQLSTATE[23000]:完整性约束 违规:1452 无法添加或更新 子行:外键约束 失败(eat/alumno__beca,约束 alumno__beca_persona_id_alumno_id 外键 (persona_id) 参考 alumno (id) 删除级联)

有人知道如何为从另一个表继承的表编写夹具吗?

谢谢!

【问题讨论】:

    标签: php symfony1 doctrine symfony-1.4 doctrine-inheritance


    【解决方案1】:

    我上周开始使用 symfony,但今天我遇到了这些问题..

    第一个问题是,你的外键必须是整数。不是整数(3).. 如果它是外键,则不应写入字段大小。而且你的代码是正确的,这只是一个信息。

    第二个问题是, 您应该删除数据库表上的外键索引。如果它已经被创建,当你再次插入 SQL 时它会报错。

    【讨论】:

    • 戴维特,感谢您的回答!我的问题是外键约束,但我无法从数据库中删除它们,所以我改变了固定装置的加载顺序,它起作用了!
    【解决方案2】:

    我不确定这是否是您唯一的问题,但是在为具有关系的表加载固定装置时,请按照不违反其外键约束的顺序单独加载它们:先父,然后子...不是所有的一起。如果您以这种方式定义了关系,则子记录不能在没有父记录的情况下“合法”存在,否则约束将失败。

    【讨论】:

    • 谢谢!这正是问题所在!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-08
    • 2021-01-17
    • 2012-11-15
    • 2023-03-05
    • 1970-01-01
    相关资源
    最近更新 更多