問題タブ [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.
cakephp - SoftDelete の動作 CakePHP - 削除の問題
CakeDC の utils パッケージの Soft Delete - Behavior を使用しています。
( https://github.com/CakeDC/utils )
問題は次のとおりです。次のように、何かがソフト(削除)されているかどうかをコントローラーで確認したい:
残念ながら、私は結果を間違っています。ユーザーが(ソフト)削除された場合、「ユーザーは削除されていません」というメッセージが表示され、その逆も同様です。
私は Cake がこのリクエストを処理する方法を知っており、beforeDelete フックは false を返して、データの (ハード) 削除を停止する必要があります。しかし、github でこの問題を参照すると、これは今では修正されているはずです。これが機能しないのは私だけですか?
単に条件を否定する以外に、この問題の回避策はありますか? (それはしたくない、それは正しくない)
よろしくお願いします!
ナーリ
mongoid - mongoid インクルード 論理的に削除されたドキュメント
Mongoid はソフト削除をサポートしています
コレクションの 1 つからドキュメントをソフト削除したとします。
ここで、そのコレクションから論理的に削除されたドキュメントを含むクエリが必要です。
どうやってやるの?
これを達成するために別の方法を作成する必要がありますか?
ありがとう
doctrine-orm - リスナー「SoftDeleteableListener」が EventManager に追加されませんでした
この例に従って、softdeletable
Symfony 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 のインスタンスであるリスナーを追加する必要がありますか?
java - hibernate による非プリミティブ型のフィルタリング
私のデータベースでは、オブジェクトを削除しません。代わりにソフト削除が実行されます。delted フラグが true に設定されていることを意味します。これは、@Filter アノテーションを使用して hibernate でフィルタリングする必要があります。これは機能しますが、フィールドがフィルタリングされないという問題があります。
たとえば、子クラスと子を含む親クラスがあります。子が削除され、親がロードされた場合、親オブジェクトには子オブジェクトが含まれます (deleted フラグは正しく設定されています)。しかし、コレクションで動作するように、子オブジェクトをフィルタリングしたいと思います。それを行う方法はありますか?
フィールドをコレクションのように扱ってみましたが、うまくいきませんでした。
grails - Hibernate Filters Plugin を使用して Grails でエンティティをソフト削除する
ユーザーを DB から削除しないようにする方法を探していましたが、代わりに削除済みとしてマークし、クエリに戻さないようにしました。
このプラグインhttp://grails.org/plugin/hibernate-filterを見つけました。これは、タスクに最適なツールでした。
しかし、解決策を実装しようとしたとき、解決策がインターネット上にない (または見つけることができなかった) 同じ問題に合格しました。
そこで、次に、ソフト削除の問題を解決する方法について説明します。
linq - ExpressionVisitor ソフト削除
エンティティ フレームワークで論理的な削除機能を実装する際に問題が発生しています。アイデアは、EF コンテキストを認識しているリポジトリを使用することです。プラグイン システムを実装したレポジトリのレベルでは、レポジトリでアクションが実行されるたびに、これらのプラグインが実行されます。たとえばRepository.GetQuery<Relation>()
、プラグインを呼び出すと実行されます。プラグインの 1 つは です。このプラグインは、select にある各テーブルにステートメントをLogicalDeletePlugin
追加する必要があります。Where(x => x.IsDeleted)
アイデアは、linq 式にアクセスし、すべての「テーブル」選択ステートメントを見つけて条件を追加するIsDeleted
を使用してこのプラグインを実装することでした。ExpressionVisitor
IsDeleted
質問/問題を明確にするために、いくつかのコード例を使用して問題を説明します。
上記の 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))
。
sql - 親子関係でソフト削除をカスケードする方法
ソフト削除が使用される単純なスキーマがあります(これが設計方法であり、変更できません)。スキーマに参加するテーブルは2つありますCompany (id, is_deleted)
。もちろん、テーブルへEmployee (id, company_id, is_deleted)
のcompany_id
FKです。Company
ルールは次のとおりです。
- a
Company
がを持っている場合、その会社を参照しているis_deleted = true
すべてのがを持っている必要があります。Employee
is_deleted = true
- しかし、親が
Employee
持っていても、持っている可能性があります。is_deleted = true
Company
is_deleted = false
私の2つの問題は、a)これらの制約をどのように適用するかです。b)aがソフト削除されis_deleted = true
たときにカスケードされることを最も簡単に確認する方法。Company
タグpostgresqlとsqlserverを追加したのは、これらが私が最も興味を持っているデータベースだからです。他のrdbms:esに他のソリューションがある場合は、それらについても聞きたいです。
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メソッドで立ち往生しています。
次の解決策がありますが、その方法がわかりません。
- 多態的ルックアップを上書きします。どのように?
- 評価される前に生のSQLを文字列として取得し、sub / gsubWheredeleted_atがnull部分です。
これにアプローチする方法に関するありとあらゆる提案をいただければ幸いです。
symfony - ソフト削除可能な動作と実際のエンティティの削除
DoctrineExtensionsとStofDoctrineExtensionsBundleを使用して、ソフト削除可能な動作を取得しています。
それは私のアプリケーションのフロントエンドで本当にうまく機能します。
バックエンドでは、エンティティを「ハード」削除するオプションが必要です。
管理コントローラーでフィルターを無効にしました(SonataAdminを使用しています)。
これは機能します(ソフト削除されたエンティティがリストに表示されます)が、削除しようとすると、エンティティは再びソフト削除されます。「ハード」削除を強制するにはどうすればよいですか?