【Go】sqlboilerで論理削除を実装する
2022年04月11日 5:22
あるプロジェクトでGoのORMとしてsqlboilerを利用しています。sqlboilerは公式ドキュメントが充実していますが、日本語訳のドキュメントが少ないと感じました。論理削除の実装について少しでも知見を提供できれば幸いです。
調査できているのがMySQLのみになりますが、他のDBでも大きくは 変わらないと思います。
論理削除を実装したいテーブルのフィールドにどちらか2つのフィールドを追加する必要があります。
deleted_at
のタイムスタンプ(datetime型)フィールドを追加するdeleted
のtinyintフィールドを追加する(Mysqlではbooleanをtinyintを利用して実現します)deleted_at
での実装例
generateコマンドで--add-soft-deletes
オプションを追加するだけです!
すると、先ほどdeleted_at
を追加したテーブルから生成されたmodelにもDeletedAt
が追加されているのがわかります。
論理削除を追加するとデフォルトで論理削除データを取得しないクエリになります。
実際にExists
クエリを投げて見るとdeleted_at is null
で実行されているのがわかります。
Oneでusersデータを1つ取得する
発行されるsqlを確認できるようにデバッグモードを設定します
発行されるSQL
qm.WithDeleted
を使うことで取得できるようになります。
発行されるSQL
qm.WithDeleted
はv4.5.0でリリースされた割と新しい機能なので最新バージョンにupdateすることをお忘れなく!
sqlboilerの論理削除について使い方をご紹介しました。sqlboilerは今(2022年4月)も活発に開発されているORMライブラリになります。パフォーマンスも他のORMよりも良くタイプセーフに使えるのでおすすめのライブラリです。この機会にぜひご利用ください!
https://github.com/volatiletech/sqlboiler#automatic-deletedat-soft-delete
診断を受けるとあなたの現在の業務委託単価を算出します。今後副業やフリーランスで単価を交渉する際の参考になります。また次の単価レンジに到達するためのヒントも確認できます。
目次を見る