Ecto Soft Delete 使用教程
ecto_soft_deleteSoft Deletion for Ecto项目地址:https://gitcode.com/gh_mirrors/ec/ecto_soft_delete
项目介绍
Ecto Soft Delete 是一个用于 Ecto 的软删除功能的扩展库。它允许你在数据库中标记记录为已删除,而不是永久删除它们。这样可以保留数据的历史记录,同时避免数据丢失。
项目快速启动
安装
首先,在你的 mix.exs
文件中添加依赖:
defp deps do
[
{:ecto_soft_delete, "~> 2.0"}
]
end
然后运行以下命令来获取依赖:
mix deps.get
配置
在你的 Repo 模块中使用 Ecto Soft Delete:
defmodule MyApp.Repo do
use Ecto.Repo, otp_app: :my_app, adapter: Ecto.Adapters.Postgres
use Ecto.SoftDelete.Repo
end
迁移
在迁移文件中添加软删除列:
defmodule MyApp.Repo.Migrations.CreateUser do
use Ecto.Migration
import Ecto.SoftDelete.Migration
def change do
create table(:users) do
add :email, :string
add :password, :string
timestamps()
soft_delete_columns()
end
end
end
模型
在模型中添加软删除字段:
defmodule MyApp.User do
use Ecto.Schema
import Ecto.SoftDelete.Schema
schema "users" do
field :email, :string
soft_delete_schema()
end
end
查询
查询未删除的记录:
import Ecto.Query
query = from u in MyApp.User, select: u
results = MyApp.Repo.all(query) |> Ecto.SoftDelete.Query.with_undeleted()
应用案例和最佳实践
软删除用户
假设你有一个用户管理系统,你可以使用软删除来标记用户为已删除,而不是永久删除他们的记录。
user = MyApp.Repo.get(MyApp.User, 42)
case MyApp.Repo.soft_delete(user) do
{:ok, struct} ->
IO.puts("Soft deleted with success")
{:error, changeset} ->
IO.puts("Something went wrong")
end
查询已删除的用户
如果你需要查询已删除的用户,可以使用 with_deleted: true
选项:
query = from u in MyApp.User, select: u
results = MyApp.Repo.all(query) |> Ecto.SoftDelete.Query.with_deleted()
典型生态项目
Ecto Soft Delete 可以与其他 Ecto 相关的项目一起使用,例如:
- Ecto: 数据库包装和集成库。
- Phoenix: Elixir 的 Web 框架,可以与 Ecto 一起使用来构建 Web 应用程序。
- Absinthe: Elixir 的 GraphQL 库,可以与 Ecto 一起使用来构建 GraphQL API。
通过结合这些项目,你可以构建一个完整的数据驱动应用程序,同时利用软删除功能来管理数据的生命周期。
ecto_soft_deleteSoft Deletion for Ecto项目地址:https://gitcode.com/gh_mirrors/ec/ecto_soft_delete