ホームページ >バックエンド開発 >Golang >Golang GORM は論理的な削除と同様に archived_at を実装します

Golang GORM は論理的な削除と同様に archived_at を実装します

WBOY
WBOY転載
2024-02-05 22:33:12483ブラウズ

Golang GORM 实现类似于软删除的archived_at

質問内容

GORM V1を使用しています。 GORM deleted_at と同様の archived_at 列を追加したいという要件があります。エンティティはアーカイブおよびアーカイブ解除できます。デフォルトでは、archived_at が NULL であるレコードをクエリします。

私の現在のアイデアは、GORM コールバックを使用してコールバックを登録することです

  1. gorm:query コールバックの前にコールバックを登録します。
  2. スキーマ/モデルに archived_at フィールドが必要かどうかを確認します。
  3. このフィールドが存在する場合は、必要な条件を追加してください。

これは素晴らしく聞こえますが、アーカイブの Unscoped() に相当するものを効率的にコピーするにはどうすればよいですか。

  • アーカイブされたレコードを取得する慣用的な方法は何ですか? archived_at 列を必要なコールバックに追加するかどうかを指定するにはどうすればよいですか?
  • また、アーカイブされたレコードを取得したいという状況にも遭遇します (archived_at が NULL ではない場合)。

編集 - 私の使用例は、一方のフィールドをもう一方のフィールドの代わりに使用するのではなく、deleted_at フィールドと archived_at フィールドの両方を使用することです。エンティティをアーカイブする機能を追加しながら、論理的な削除の機能を維持したいと考えています。ユーザーは単純にアーカイブされ、場合によっては削除 (論理的に削除) される可能性があります。


正解


フィードバックを募集します。これが私が今考えていることです。

Callback.go

リーリー

スコープ.ゴー

リーリー

main.go

リーリー

以上がGolang GORM は論理的な削除と同様に archived_at を実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。