【Go】sqlboilerで論理削除を実装する

0

2022年04月11日 5:22

あるプロジェクトでGoのORMとしてsqlboilerを利用しています。sqlboilerは公式ドキュメントが充実していますが、日本語訳のドキュメントが少ないと感じました。論理削除の実装について少しでも知見を提供できれば幸いです。
調査できているのがMySQLのみになりますが、他のDBでも大きくは 変わらないと思います。

事前準備

論理削除を実装したいテーブルのフィールドにどちらか2つのフィールドを追加する必要があります。

  • deleted_atのタイムスタンプ(datetime型)フィールドを追加する
  • deletedのtinyintフィールドを追加する(Mysqlではbooleanをtinyintを利用して実現します)

deleted_atでの実装例
img

論理削除の導入

generateコマンドで--add-soft-deletesオプションを追加するだけです!
img

すると、先ほどdeleted_atを追加したテーブルから生成されたmodelにもDeletedAtが追加されているのがわかります。
img

デフォルトで論理削除データは取得されない

論理削除を追加するとデフォルトで論理削除データを取得しないクエリになります。
実際にExistsクエリを投げて見るとdeleted_at is nullで実行されているのがわかります。

Oneでusersデータを1つ取得する
img

発行されるsqlを確認できるようにデバッグモードを設定します
img

発行されるSQL
img

論理削除データを取得したい場合

qm.WithDeletedを使うことで取得できるようになります。
img

発行されるSQL
img

qm.WithDeletedv4.5.0でリリースされた割と新しい機能なので最新バージョンにupdateすることをお忘れなく!

終わりに

sqlboilerの論理削除について使い方をご紹介しました。sqlboilerは今(2022年4月)も活発に開発されているORMライブラリになります。パフォーマンスも他のORMよりも良くタイプセーフに使えるのでおすすめのライブラリです。この機会にぜひご利用ください!

参考

https://github.com/volatiletech/sqlboiler#automatic-deletedat-soft-delete

# Go
0

診断を受けるとあなたの現在の業務委託単価を算出します。今後副業やフリーランスで単価を交渉する際の参考になります。また次の単価レンジに到達するためのヒントも確認できます。

目次を見る