問題タブ [soft-delete]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
2946 参照

cakephp - SoftDelete の動作 CakePHP - 削除の問題

CakeDC の utils パッケージの Soft Delete - Behavior を使用しています。
( https://github.com/CakeDC/utils )

問題は次のとおりです。次のように、何かがソフト(削除)されているかどうかをコントローラーで確認したい:

残念ながら、私は結果を間違っています。ユーザーが(ソフト)削除された場合、「ユーザーは削除されていません」というメッセージが表示され、その逆も同様です。

私は Cake がこのリクエストを処理する方法を知っており、beforeDelete フックは false を返して、データの (ハード) 削除を停止する必要があります。しかし、github でこの問題を参照すると、これは今では修正されているはずです。これが機能しないのは私だけですか?

単に条件を否定する以外に、この問題の回避策はありますか? (それはしたくない、それは正しくない)

よろしくお願いします!
ナーリ

0 投票する
1 に答える
622 参照

mongoid - mongoid インクルード 論理的に削除されたドキュメント

Mongoid はソフト削除をサポートしています

コレクションの 1 つからドキュメントをソフト削除したとします。

ここで、そのコレクションから論理的に削除されたドキュメントを含むクエリが必要です。

どうやってやるの?

これを達成するために別の方法を作成する必要がありますか?

ありがとう

0 投票する
4 に答える
12242 参照

doctrine-orm - リスナー「SoftDeleteableListener」が EventManager に追加されませんでした

この例に従って、softdeletableSymfony 2.1.0-DEV を実行しているプロジェクトで拡張機能をテストしました。

以下のように config.yml を設定しました。

私のコントローラーアクション:

コードを実行すると、常に例外が表示されます。Listener "SoftDeleteableListener" was not added to the EventManager!

SoftDeleteableFilterデバッグに時間を費やした後、クラスに関数があることがわかりましたgetListener()

ただし、$listenersプロパティにはSoftDeleteableListenerアイテムがありませんが、次のような他のリスナーがあります

  • Gedmo\Tree\TreeListener
  • Gedmo\Sortable\SortableListener
  • Gedmo\Sluggable\SluggableListener
  • Gedmo\Loggable\LoggableListener
  • Gedmo\Timestampable\TimestampableListener
  • Gedmo\Translatable\TranslatableListener

loadClassMetadata から生成されます。doctrine_extensions.yml サービス リスナーから生成される可能性があると思います。

だから私は以下を追加しようとしました:

しかし、それはまだ示していますListener "SoftDeleteableListener" was not added to the EventManager!

SoftDeleteableListener のインスタンスであるリスナーを追加する必要がありますか?

0 投票する
2 に答える
1074 参照

java - hibernate による非プリミティブ型のフィルタリング

私のデータベースでは、オブジェクトを削除しません。代わりにソフト削除が実行されます。delted フラグが true に設定されていることを意味します。これは、@Filter アノテーションを使用して hibernate でフィルタリングする必要があります。これは機能しますが、フィールドがフィルタリングされないという問題があります。

たとえば、子クラスと子を含む親クラスがあります。子が削除され、親がロードされた場合、親オブジェクトには子オブジェクトが含まれます (deleted フラグは正しく設定されています)。しかし、コレクションで動作するように、子オブジェクトをフィルタリングしたいと思います。それを行う方法はありますか?

フィールドをコレクションのように扱ってみましたが、うまくいきませんでした。

0 投票する
2 に答える
2239 参照

grails - Hibernate Filters Plugin を使用して Grails でエンティティをソフト削除する

ユーザーを DB から削除しないようにする方法を探していましたが、代わりに削除済みとしてマークし、クエリに戻さないようにしました。

このプラグインhttp://grails.org/plugin/hibernate-filterを見つけました。これは、タスクに最適なツールでした。

しかし、解決策を実装しようとしたとき、解決策がインターネット上にない (または見つけることができなかった) 同じ問題に合格しました。

そこで、次に、ソフト削除の問題を解決する方法について説明します。

0 投票する
2 に答える
1104 参照

linq - ExpressionVisitor ソフト削除

エンティティ フレームワークで論理的な削除機能を実装する際に問題が発生しています。アイデアは、EF コンテキストを認識しているリポジトリを使用することです。プラグイン システムを実装したレポジトリのレベルでは、レポジトリでアクションが実行されるたびに、これらのプラグインが実行されます。たとえばRepository.GetQuery<Relation>()、プラグインを呼び出すと実行されます。プラグインの 1 つは です。このプラグインは、select にある各テーブルにステートメントをLogicalDeletePlugin追加する必要があります。Where(x => x.IsDeleted)アイデアは、linq 式にアクセスし、すべての「テーブル」選択ステートメントを見つけて条件を追加するIsDeletedを使用してこのプラグインを実装することでした。ExpressionVisitorIsDeleted

質問/問題を明確にするために、いくつかのコード例を使用して問題を説明します。

上記の c# コードは、次の SQL コードになります。

結果の SQL クエリでわかるように、IsDeletedステートメントはTestWorks = x.Bonus.Where(y => !y.IsDeleted)「select」コードに追加されます。TestVisitorが現在行っていることです。しかし、問題は、これを他の選択にもどのように実装できるかということです。これは一部x => !x.IsDeletedに追加されません。Test = x.Bonus

ExpressionVisitor はこれを行うための正しいアプローチですか、それとも別のソリューションを使用する必要がありますか? すべての助けに感謝します!説明が十分に明確でない場合はお知らせください。追加情報を提供します。

編集:

上記は、私が ExpressionVisitor に追加したものです。return Expression.MamkeMemberaccess コードのコメントを外すと、MemberExpression などを想定していないため、例外がスローされます。

以下は私が思いついた解決策です:

QueryConditional は、 type の Expression を保持するクラスExpression<Func<T, bool>>です。

InjectconditionVisitor は、 のように InterceptWith (QueryInterceptor NuGet パッケージ) と組み合わせて使用​​できますquery.InterceptWith(new InjectConditionVisitor(new QueryConditional(x => x.Deleted == true))

0 投票する
1 に答える
1487 参照

sql - 親子関係でソフト削除をカスケードする方法

ソフト削除が使用される単純なスキーマがあります(これが設計方法であり、変更できません)。スキーマに参加するテーブルは2つありますCompany (id, is_deleted)。もちろん、テーブルへEmployee (id, company_id, is_deleted)company_idFKです。Companyルールは次のとおりです。

  • aCompanyがを持っている場合、その会社を参照しているis_deleted = trueすべてのがを持っている必要があります。Employeeis_deleted = true
  • しかし、親がEmployee持っていても、持っている可能性があります。is_deleted = trueCompanyis_deleted = false

私の2つの問題は、a)これらの制約をどのように適用するかです。b)aがソフト削除されis_deleted = trueたときにカスケードされることを最も簡単に確認する方法。Company

タグpostgresqlとsqlserverを追加したのは、これらが私が最も興味を持っているデータベースだからです。他のrdbms:esに他のソリューションがある場合は、それらについても聞きたいです。

0 投票する
1 に答える
1149 参照

ruby-on-rails-3 - Rails3のポリモーフィックな関係を介してパラノイアで削除されたオブジェクトを取得する

属性ごとにアクションを格納するために使用されるAuditクラスがあります。

:byと:onのポリモーフィックな関連付けは、監査する必要のあるあらゆる種類のオブジェクトを格納するために使用されます。主な理由は、多態性がスキーマ内でタイプとIDに分解されているため、すべてのモデルオブジェクトを格納できるはずです。

私が抱えている問題は、監査対象のすべてのオブジェクトがパラノイアジェムも使用していることです。パラノイアジェムは、各モデルテーブルにdeleted_at列を導入します。この列は、「where(deleted_at is null)」のように設定されたdefault_scopeを介して、そのモデルのすべてのクエリに対してチェックされます。パラノイアgemは、default_scopeをオンにすることで直接クエリを実行できるメソッド.with_deletedも提供し、その結果、パラノイド/ソフト削除されたオブジェクトも返します。

ただし、削除されたアイテムがあり、を使用してすべての監査済みアイテムを一覧表示しようとした場合。

.with_deleted呼び出しを追加する各ポリモーフィック:byおよび:onオブジェクトに対してルックアップクエリを実行するようにRailsに指示する方法がわかりません。私の推測では、railsはポリモーフィック関係のオブジェクトを次のように検索します。

私の場合、パラノイアジェムのdefault_scopeが適用されたオブジェクトが得られます。

Auditでself.find_by_sqlをオーバーライドしようとしましたが、うまくいきませんでした。私は先に進む前にもっと読む必要があるいくつかのArelメソッドで立ち往生しています。

次の解決策がありますが、その方法がわかりません。

  1. 多態的ルックアップを上書きします。どのように?
  2. 評価される前に生のSQLを文字列として取得し、sub / gsubWheredeleted_atがnull部分です。

これにアプローチする方法に関するありとあらゆる提案をいただければ幸いです。

0 投票する
4 に答える
5141 参照

symfony - ソフト削除可能な動作と実際のエンティティの削除

DoctrineExtensionsStofDoctrineExtensionsBundleを使用して、ソフト削除可能な動作を取得しています。

それは私のアプリケーションのフロントエンドで本当にうまく機能します。

バックエンドでは、エンティティを「ハード」削除するオプションが必要です。

管理コントローラーでフィルターを無効にしました(SonataAdminを使用しています)。

これは機能します(ソフト削除されたエンティティがリストに表示されます)が、削除しようとすると、エンティティは再びソフト削除されます。「ハード」削除を強制するにはどうすればよいですか?