1

私はdoctrineのSoftDeleteを使用していますが、削除時に関連レコードをSofDeleteしたいと考えています。

これが私が使用しているスキーマファイルです。

detect_relations: true
User:
  actAs:
    Timestampable:
    SoftDelete:
    Sluggable:
      unique: true
      fields: [name]
      canUpdate: true
  tableName: user
  columns:
    name:
      type: string(50)
      notnull: true
    email:
      type: string(50)
      notnull: true
      unique: true
    password:
      type: string(50)
      notnull: true
    business_id: integer
  relations:
    Business:
      cascade: [delete]
Business:
  actAs:
    Timestampable:
    SoftDelete:
    Sluggable:
      unique: true
      fields: [name]
      canUpdate: true
  tableName: business
  columns:
    name:
      type: string(50)
      notnull: true
    website: string(100)
    address: string(100)

ユーザーを SoftDelete しようとすると、ビジネス テーブルから関連するレコードが削除されません (つまりdeleted_at、ビジネス テーブルのフラグが更新されません)。deleted_atユーザー テーブルのフラグのみが更新されます。

私が使用しているDQLはです。

$q = Doctrine_Query::create()
    ->delete('Model_User u')
    ->where('u.id = ?', $id);
$q ->execute();

どこが間違っていますか?

4

1 に答える 1

4

しばらく探し回った後、ようやく自分で解決策を見つけました。これが私と同じ問題を抱えている人に役立つことを願っています。

ここでは、アプリケーション レベルの削除カスケードが機能するためのいくつかの条件を示します。

  • save() 操作とは異なり、delete() カスケードは明示的にオンにする必要があります

スキーマで定義することとは別にcascade: [delete]、リレーションも明示的に定義する必要があることに注意することが重要です。
すべての関係を生成することに依存している場合detect_relations: true、これはアプリケーションレベルの削除カスケードでは機能しません。(少なくとも、リレーションを手動で定義した後はうまくいきませんでした)。

  • アプリケーション レベルのカスケード save() および delete() は、DQL の update および delete ステートメントを実行する場合には適用されず、オブジェクトで save() および delete() を呼び出す場合にのみ適用されます。

教義の文書はこれについて明確ではありません。これを理解するには、symfony のドキュメントを参照する必要がありました。教義の文書は言うだけです。

$record->delete()でレコードを削除する場合の一般的な手順を次に示します。

私が理解するには、それはかなり混乱していました。しかし、symfony のドクトリンのドキュメントを読んだ後、その方法が明確になりました。そのため、DQL を介して削除する代わりに。私はこれを使わなければなりませんでした。

$user = Doctrine_Core::getTable('User')->find(1)
$user->delete();

そしてブーム、それは動作します。:)

PS: 誰かが参照したい場合に備えて、ここに symfony ドキュメントへのリンクがあります。

http://www.symfony-project.org/doctrine/1_2/en/04-Schema-Files#chapter_04_sub_application_level

そして、ここに私の疑問を明確にする投稿へのリンクがありますが、これは役に立ちません:)

https://groups.google.com/forum/?fromgroups#!topic/doctrine-user/POq6ybO01lg%5B1-25%5D

于 2012-08-15T04:52:36.843 に答える