无法删除模型-函数Ecto.Query .__ changeset __ / 0未定义或私有

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

Osk*_*kar 6

更换first()用两种Repo.one!()Repo.delete_all()Ecto.Query.first()返回查询,但Repo.delete()需要模型的结构或变更集。如果您将其传递给查询,则只会感到困惑。

通过使用Repo.one!(),您首先要获取结构,然后将其传递给Repo.delete()Repo.delete()可以使用。

Repo.delete_all()可以接受查询,但是它将直接删除与查询匹配的所有内容。所以要小心