2017-05-04 223 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()