2017-09-27 2 views
0

Ich habe Situation, in der ich nicht will, dass Daten aktualisiert werden, wenn die Daten bereits vorhanden sind (genaue Funktionalität von UPSERT VALUES in 4.9).Phoenix - was ist die äquivalente Funktionalität von UPSERT VALUES..ON DUPLICATE KEY

lässt sagen, das ich meine Daten und der Primärschlüssel ist Deptno.

deptno, deptname, created_date 
1  dept1  2017-03-22 00:10:30 
2  dept2  2017-03-23 00:10:30 

Wenn ich Upsert tun für Dept2 als

upsert into dept(deptno,deptname,created_date) values(2,'new dept name','2017-04-06 00:12:30'); 
upsert into dept(deptno,deptname,created_date) values(3,'dept3','2017-04-06 00:12:30'); 

Es sollten keine Informationen aktualisieren für deptno 2, da es bereits vorhanden ist. Deptno 3 Daten sollten hochgeladen werden.

Gibt es irgendeine Funktion, die ich für die Phoenix-Version in 4.9 verwenden kann, hat UPSERT VALUES.

Jede Hilfe wäre großartig.

Antwort

0

Dies ist wahrscheinlich das, was suchen Sie: https://hexdocs.pm/ecto/Ecto.Repo.html#c:insert_or_update/2

result = 
    case MyRepo.get(Post, id) do 
    nil -> %Post{id: id} # Post not found, we build one 
    post -> post   # Post exists, let's use it 
    end 
    |> Post.changeset(changes) 
    |> MyRepo.insert_or_update 

case result do 
    {:ok, struct}  -> # Inserted or updated with success 
    {:error, changeset} -> # Something went wrong 
end 
Verwandte Themen