6

すべてのモデルに doctrine の softdelete ビヘイビアーをアタッチしています。特定のレコードを完全に削除する方法はありますか?

Cakephp では、ビヘイビアーを切り離したことを覚えています... レコードを削除してから、ビヘイビアーを再度アタッチしました。

symfony/doctrine に似たようなものはありますか? もしそうなら、どうすれば振る舞いを切り離すことができますか?

乾杯

4

6 に答える 6

13

うーん.. SoftDeleteの動作には、これを行うためのはるかに優れた方法が含まれています...単に呼び出すだけです

$record->hardDelete();
于 2010-02-19T23:45:38.337 に答える
10

私はゼッドのやり方に行くと思いますが、完全を期すために:

ソフト削除動作の削除 (および選択) のイベント リスナー メソッドには、次のものが含まれます。

if ( ! $query->contains($field)) {
   // do the magic stuff to covert the query to respect softdelete
}

これは、クエリでフィールドを明示的に指定した場合、クエリに変換が適用されないことを意味します。

したがって、次のようにします。

$q = Doctrine_Query::create()
->delete('Table t')
->where('t.id = ? AND t.deleted != 2 ', 1);

論理的な削除は適用されず、実際にレコードが削除されます。t.deleted で何でもできることに注意してください。私は常に true になることを実行しました。エイリアス ('t.') も重要です。

このトリックは、私が以前に通常使用していた選択でも機能します。

私が言うように、私はその方が良いと思います:

$old_dqlc = Doctrine_Manager::getInstance()->getAttribute(Doctrine::ATTR_USE_DQL_CALLBACKS);
Doctrine_Manager::getInstance()->setAttribute(Doctrine::ATTR_USE_DQL_CALLBACKS, false);
$record->delete();
Doctrine_Manager::getInstance()->setAttribute(Doctrine::ATTR_USE_DQL_CALLBACKS, $old_dqlc);

特に、クエリを手動で作成する必要はなく、delete() メソッドを引き続き使用できます。クエリ メソッドの利点の 1 つは、レコードに他のビヘイビアが関連付けられている場合でも、それらが尊重されることです。

于 2010-02-01T20:09:10.023 に答える
5

$object->getListener()->setOption('disabled',true);

これにより、このオブジェクトのすべてのレコード リスナーが無効になります。

于 2011-02-23T13:22:11.133 に答える
1

リンクテキスト私は、この関数と、マネージャと同じように use dql callbacks を false に設定することでうまくいくと思います:)。

于 2009-12-07T12:27:17.617 に答える
1

Joshua Coady に同意してもらいたいのですが、最善の方法は

$record->hardDelete()

ただし、「selects」の動作を切り離す最も簡単な方法は、単に「deleted_at」(またはフィールドに名前を付けたもの)を含めることであるという教義の動作を切り離すための Google での最初の結果の 1 つであるため、ここに追加したいとも思いました。リスナーはそれが含まれているかどうかを確認し、含まれている場合は削除されたレコードを除外しません。

Doctrine_Core::getTable('Record')->createQuery()->select('id, etc1, etc2')->addSelect('deleted_at')->execute();

削除されたレコードを返します。

于 2010-08-12T21:44:58.207 に答える
1

これを呼び出してみてください。ビヘイビア処理を無効にする必要があります。

$manager->setAttribute(Doctrine::ATTR_USE_DQL_CALLBACKS, false);

汚い方法として、テーブルからエントリを削除する SQL クエリを生成できます。

于 2009-09-24T14:23:53.007 に答える