私はすべてのモデルにdoctrineのソフトデリート動作を添付しています。特定のレコードを削除する方法はありますか?Symfony/Doctrineで動作を切り離すにはどうすればいいですか?
cakephpで私は振る舞いを切り離してしまったことを覚えています...レコードを削除してから振る舞いを付け直してください。
symfony/doctrineに類似したものはありますか?もしそうなら、どのように行動を切り離すのですか?
乾杯
私はすべてのモデルにdoctrineのソフトデリート動作を添付しています。特定のレコードを削除する方法はありますか?Symfony/Doctrineで動作を切り離すにはどうすればいいですか?
cakephpで私は振る舞いを切り離してしまったことを覚えています...レコードを削除してから振る舞いを付け直してください。
symfony/doctrineに類似したものはありますか?もしそうなら、どのように行動を切り離すのですか?
乾杯
は私がゼッドの道のために、完全を期すために行くと思う
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で何かできることに注意してください、私はちょうど真実である何かをしました。エイリアス( '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()メソッドを使用することができます。クエリメソッドのもう一つの利点は、レコードに他のビヘイビアが添付されている場合でも、それが引き続き尊重されることです。
link text私はこの機能と設定を使用すると、マネージャーのように誤ってトリック:)を行う必要があると思うでしょう。ソフト削除の動作については、削除のためのイベントリスナーメソッド
(および選択)含まれています:
うーんは... SoftDelete behaviorだけで最善の方法を用いることであろうというヨシュアCoadyに同意したかった
$record->hardDelete();
はい - これは私の考えより先に受け入れられることをお勧めします。私は以来これを使用し始めました。 – benlumley
呼び出す...これを行うための多くのより洗練された方法が含ま
$record->hardDelete()
しかし、私がここで追加したかったのは、doctrineの振る舞いを分離するためのGoogleの最初の結果の1つで、「選択」の振る舞いを切り離す最も簡単な方法は、単に「deleted_at」(またはあなたのフィールド名クエリの場合と同様に、リスナーはse eが含まれている場合は削除されたレコードをフィルタリングしません。
Doctrine_Core::getTable('Record')->createQuery()->select('id, etc1, etc2')->addSelect('deleted_at')->execute();
は、削除されたレコードを返します。
$object->getListener()->setOption('disabled',true);
これは、このオブジェクトのすべてのレコードリスナーを無効にします。
おそらく、Doctrine :: ATTR_USE_DQL_CALLBACKSの前の値をfalseとtrueに設定するのではなく、格納しておくべきでしょう。そのコードに遭遇する前にCALLBACKSがオフになっていたら? –
はい...私は...編集すべきです。 – benlumley
(コールバックがオフの場合、ソフト削除は機能しません) – benlumley