2017-05-04 163 views
0

简单的要求:从记录获取一个记录集

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: 

是的,有是一些记录,这是很正常的,但我的本意是拿第一一。为什么是异常和如何解决它?

回答

3

为什么例外

Repo.one总是返回零或一个记录,如果程序员添加limit到查询自己,而不是从数据库中获取更多的记录,然后扔一切会更好但一个。

如何解决?

您可以使用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()