Tor*_*ito 1 elixir ecto phoenix-framework
我正在尝试删除一个项目及其所有子项:
where(ParentModel, [x], x.user_id == 123)
|> first
|> Repo.delete()
# or
# Repo.delete(where(ParentModel, [x], x.user_id == 123))
Run Code Online (Sandbox Code Playgroud)
两者都抛出异常:
function Ecto.Query.__changeset__/0 is undefined or private
Run Code Online (Sandbox Code Playgroud)
它与验证有什么关系?
在父模型中,我有 on_delete: :delete_all
更换first()用两种Repo.one!()或Repo.delete_all()。Ecto.Query.first()返回查询,但Repo.delete()需要模型的结构或变更集。如果您将其传递给查询,则只会感到困惑。
通过使用Repo.one!(),您首先要获取结构,然后将其传递给Repo.delete(),Repo.delete()可以使用。
Repo.delete_all()可以接受查询,但是它将直接删除与查询匹配的所有内容。所以要小心