2

1対1のテーブルがあります。私の config/doctrine/schema.yml では、両方のテーブルにそれぞれ次のものがあります。

TableA:
  #...
  relations:
    TableB: { onDelete: CASCADE, local: id, foreign: table_a_id }

TableB:
  #...
  relations:
    TableA: { onDelete: CASCADE, local: table_a_id, foreign: id }

TableA 要素を削除すると、TableB の対応する要素も削除されます。しかし、これは逆には機能しません。

Symfony で 1 対 1 の相互削除を行うには?


@Pabloks:理解しました。提示した単純化されたケースに進みます。しかし実際には、少なくとも 3 番目のテーブルがあります。実際、最初のテーブルと他の 2 つのテーブルの間に継承の概念があります。

TableA:
  #...
  relations:
    TableB: { onDelete: CASCADE, local: id, foreign: table_a_id }
    TableC: { onDelete: CASCADE, local: id, foreign: table_a_id }

TableB:
  #...
  relations:
    TableA: { onDelete: CASCADE, local: table_a_id, foreign: id }

TableC:
  #...
  relations:
    TableA: { onDelete: CASCADE, local: table_a_id, foreign: id }
4

1 に答える 1

0

TableA ではうまくやっていますが、TableB では関係を正しく定義していません。

コードは次のようにする必要があります。

TableA:
  #...
  relations:
    TableB: { onDelete CASCADE, local: id, foreign: table_a_id }

et

TableB:
  #...
  relations:
    TableA: { onDelete CASCADE, local: id, foreign: table_b_id }

パラメータ 'local' は、現在のモデルのどのフィールドが他のモデルに関連しているかを記述し、'foreign' は、他のモデルのどのフィールドが 'local' フィールドにリンクされているかを記述します。

その明確なことを願っています。

編集:あなたの編集は間違っていると思っていましたが、後で確認してください。私の間違い。

于 2011-02-23T14:09:16.717 に答える