2016-07-14 31 views
0

我需要在數據庫中執行更新並返回一個值。這是可能的使用RETURNING關鍵字PostgreSQL如何使用片段在Ecto中更新時返回一個值

,因爲這不是由外生我想我必須使用fragment,但我不知道該怎麼做支撐。這是我有:

query = from(v in MyModel, 
where: v.id == ^instance_id, 
update: [ 
    inc: [counter: 1], 
] 
) 

我想在更新後返回某些領域,例如計數器和ID,所以我需要添加到查詢:RETURNING id, counter;

回答

1

如果使用Ecto.Repo.update_allhttps://hexdocs.pm/ecto/Ecto.Repo.html#c:update_all/3有一個選項:返回帶有字段

的返回列表傳遞:返回 - 選擇要返回的字段。如果爲true,則返回給定結構中的所有字段。可能是一個字段列表,其中一個結構仍然返回,但只有給定的字段。或者假,沒有任何東西被返回(默認)。此選項不受所有數據庫支持。

和執行後,您可以訪問此一個元組:

它返回一個包含條目的數量和任何返回的結果作爲第二個元素的元組。如果數據庫不支持UPDATE語句中的RETURNING或者沒有選擇返回結果,則第二個元素將爲零。

事情是這樣的:

result = from(v in MyModel, where: v.id == ^instance_id) 
     |> MyRepo.update_all([inc: [counter: 1]], returning: [id, counter]) 
+0

謝謝!這工作非常好。我只需要用'Repo.update_all'替換'MyRepo.update_all' –

相關問題