从记录集中获取单个记录

时间:2017-05-04 15:13:24

标签: elixir phoenix-framework ecto

简单请求:

    a1 = where(MyModel, [x], is_nil(x.some_foreign_id)) |> Repo.one()

例外:

** (exit) an exception was raised:                                
    ** (Ecto.MultipleResultsError) expected at most one result but got 6 in query:

是的,有一些记录,没关系,但我打算拿第一个。为什么例外以及如何解决它?

1 个答案:

答案 0 :(得分:4)

  

为什么例外

Repo.one总是返回nil或一条记录,如果程序员自己将limit添加到查询中而不是从数据库中获取更多记录然后抛出除一个之外的所有记录,那会更好。< / p>

  

如何解决?

您可以使用limit(1)

a1 = where(MyModel, [x], is_nil(x.some_foreign_id)) |> limit(1) |> Repo.one()

请注意,如果没有order,则返回的记录通常在大多数数据库中未定义。您可以按id订购,以获取最低id的记录:

a1 = where(MyModel, [x], is_nil(x.some_foreign_id)) |> order_by(:id) |> limit(1) |> Repo.one()