1

Symfony 1.4 で preDelete() イベントをチェーンする方法はありますか?

マスターとスレーブの 2 つのテーブルがあります。schema.yml で、マスター レコードが削除されたときにスレーブ レコードが削除を CASCADE するように定義しました。

また、スレーブの削除プロセスでは、スレーブ レコード定義の preDelete イベント メソッドでコーディングする予定の前処理を実行する必要があります。

スレーブ レコードを単独で削除すると、この preDelete() イベントにアクセスできますが、マスター レコードを介してスレーブ レコードを削除すると、マスター レコード定義の preDelete() イベントにしかアクセスできません。マスター経由でスレーブの preDelete イベントにアクセスできますか?

関連するコードは次のとおりです。

スキーマ.yml

Master:
  relations:
    Slave:

Slave:
  relations:
    Master:
      onDelete: CASCADE

lib/model/doctrine/Master.class.php

class Master extends BaseMaster
{
  public function preDelete($event)
  {
    //master predelete processing...
  }
}

lib/model/doctrine/Slave.class.php

class Slave extends BaseSlave
{
  public funcion preDelete($event)
  {
    //slave predelete processing...
  }
}
4

1 に答える 1

3

「onDelete:CASCADE」はデータベースイベントであるため、これは機能しません。したがって、コードにフックする方法はありません。これを行うには、アプリケーションカスケード削除を使用する必要がありますが、これは効率が低くなります。

Slave:
  columns:
    master_id: integer

Master:
  columns: ~
  relations:
    Slave:
      local: id
      foreign: master_id
      type: many
      foreignType: one
      cascade: [delete]

この場合、反対側でリレーションを定義する必要があることにも注意してください。

于 2011-02-22T00:39:02.290 に答える