0

テーブル A のレコードが作成されるときに複数の追加の子レコードを作成する必要があるテーブル (テーブル A と呼びます) があります。テーブル A のレコードを削除すると、テーブル B のレコードも削除されます。

でレコードを削除するのは簡単ですON DELETE CASCADEschema.yml、レコードを追加するのはそれほど簡単ではありません。Doctrine_Record::postInsertテーブル A のレコードにはまだ ID がないため、上書きは行われません。save をオーバーライドDoctrine_Formしても、それは行われません。

進むべき道ですかEventListener、それともデータベーストリガーですか? 前者の場合、例はありますか?後者の場合、何らかの方法でトリガーを指定できますschema.ymlか?

4

1 に答える 1

0

それpostInsertがうまくいかないのですか?

私はこのスニペットを私のプロジェクトの1つ(内Table.class.php)で使用しています:

public function postInsert($event)
{
  $dispatcher = ProjectConfiguration::getActive()->getEventDispatcher();
  $dispatcher->notify(new sfEvent($this, 'item.new', array(
    'item' => $this
  )));
}

新しいアイテムについてのイベントを広めました。次に、構成でこのイベントをキャッチします。

class frontendConfiguration extends sfApplicationConfiguration
{
  public function configure()
  {
    // [....]
    $this->dispatcher->connect('item.new', array('shareEvents', 'postToSocial'));

そして私のshareEventsクラスでは、問題なくアイテムIDにアクセスします。

class shareEvents
{
  static public function postToSocial(sfEvent $event)
  {
    $item = $event['item'];

    $queue = new AutopostQueue();
    $queue->setItemId($item->getId());
    $queue->save();

ちなみに、トリガーでアクションを行うこともできます。schema.ymlただし、Doctrineがトリガーを解析してモデルやフォームなどを生成するため、内部でトリガーを定義できるとは思いません。ただし、trigger.sqlディレクトリ内でファイルを定義する/data/sqlと、次の呼び出し時に自動的に読み込まれます。

php symfony doctrine:insert-sql
于 2012-09-17T22:32:25.293 に答える