2017-09-27 8 views
0

提供されたデータが既に存在する場合(4.9のUPSERT VALUESの正確な機能)、データを更新したくない場合があります。phoenix - UPSERT VALUESと同等の機能は何ですか?重複キー

これは私のデータと言うことができ、主キーはdeptnoです。

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

私は

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'); 

としてDEPT2のためのアップサートを行うと、それは既に存在しているので、それはDEPTNO 2のための任意の情報を更新するべきではありません。 deptno 3のデータをアップアップする必要があります。

4.9のphoenixバージョンで使用できる機能はすべてUPSERT VALUESです。

助けがあれば助かります。

答えて

0

これは、あなたが探しているものはおそらくです: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 
関連する問題