3

次のような 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) }

このように、「卒業生」には「ペルソナ」からの具体的な継承があります。今、この 2 つのテーブルのフィクスチャを作成しようとしていますが、Doctrine にそれらをロードさせることができません。それは私にこのエラーを与えます:

SQLSTATE [23000]: 整合性制約違反: 1452 子行を追加または更新できません: 外部キー制約が失敗しました ( eat/alumno__beca, CONSTRAINT alumno__beca_persona_id_alumno_id FOREIGN KEY ( persona_id) REFERENCES alumno( id) ON DELETE CASCADE)

別のテーブルから継承されたテーブルのフィクスチャを作成する方法を知っている人はいますか?

ありがとう!

4

2 に答える 2

1

私は先週symfonyを始めましたが、今日これらに問題があります..

最初の問題は、外部キーが整数でなければならないことです。not integer(3).. 外部キーの場合、フィールド サイズを書き込むべきではありません。また、あなたのコードは正しいです。これは単なる情報です。

2 番目の問題は、データベース テーブルの外部キー インデックスを削除する必要があることです。すでに作成されている場合、insert-sql を再度実行するとエラーが発生します。

于 2010-04-29T20:23:58.317 に答える
0

これが唯一の問題かどうかはわかりませんが、リレーションシップを持つテーブルのフィクスチャをロードするときは、外部キー制約に違反しない順序で個別にロードします: 最初に親、次に子...すべてを一緒にするわけではありません。このように関係を定義した場合、子レコードはその親なしでは「法的に」存在できません。そうしないと、制約が失敗します。

于 2010-04-20T11:56:39.573 に答える