2016-07-14 3 views
0

데이터베이스에서 업데이트를 수행하고 값을 반환해야합니다. 이것이 내가 내가 fragment를 사용해야하지만 난 그렇게하는 방법을 잘 것 같아 체외에서 지원되지 않기 때문에이 PostgreSQLEcto에서 업데이트 할 때 값을 반환하기 위해 fragment를 사용하는 방법

RETURNING 키워드를 사용 할 수 있습니다. 이것은 내가 무엇을 가지고 :

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

내가 예를 들어, 업데이트 한 후 카운터와 ID를 일부 필드를 반환하고 싶습니다, 그래서 쿼리에 추가해야 할 것 : RETURNING id, counter; 당신이 Ecto.Repo.update_allhttps://hexdocs.pm/ecto/Ecto.Repo.html#c:update_all/3를 사용하는 경우

답변

1

는 옵션이있다 : 필드

의 반환 목록을 통과 반환 : 반환 - 반환하는 필드를 선택합니다. true 인 경우 지정된 struct의 모든 필드를 반환합니다. 구조체가 여전히 반환되지만 주어진 필드에서만 반환되는 필드 목록 일 수 있습니다. 또는 아무것도 반환하지 않는 false입니다 (기본값). 이 옵션은 모든 데이터베이스에서 지원되지는 않습니다.

그리고 실행 후이 가진 튜플에 액세스 할 수 있습니다

그것은 항목의 수와 두 번째 요소와 같은 반환 된 결과를 포함하는 튜플을 반환합니다. 데이터베이스가 UPDATE 문에서 RETURNING을 지원하지 않거나 반환 결과를 선택하지 않으면 두 번째 요소는 nil이됩니다. 이 같은

뭔가 :

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

감사합니다! 이것은 완벽하게 잘 작동합니다. 나는 단지'MyRepo.update_all'을'Repo.update_all'로 대체해야했습니다. –

관련 문제