use*_*648 3 elixir ecto phoenix-framework
简单请求:
a1 = where(MyModel, [x], is_nil(x.some_foreign_id)) |> Repo.one()
Run Code Online (Sandbox Code Playgroud)
例外:
** (exit) an exception was raised:
** (Ecto.MultipleResultsError) expected at most one result but got 6 in query:
Run Code Online (Sandbox Code Playgroud)
是的,有一些记录,没关系,但我的目的是拿第一个。为什么出现异常以及如何修复它?
为什么异常
Repo.one总是返回 nil 或一条记录,如果程序员limit自己将 加入到查询中,而不是从数据库中获取更多记录,然后抛出除一条之外的所有记录,那就更好了。
如何解决?
您可以使用limit(1):
a1 = where(MyModel, [x], is_nil(x.some_foreign_id)) |> limit(1) |> Repo.one()
Run Code Online (Sandbox Code Playgroud)
请注意,如果没有order,返回的记录在大多数数据库中通常是未定义的。您可以订购id以获取最低的记录id:
a1 = where(MyModel, [x], is_nil(x.some_foreign_id)) |> order_by(:id) |> limit(1) |> Repo.one()
Run Code Online (Sandbox Code Playgroud)