2016-07-06 14 views
2

私はElixirとPhoenixと一緒に作業しています。テーブルがあり、このフィールドに新しいフィールドを追加したいのですが、このフィールドを一意にします。私のDataBaseは既にこのテーブルに一束のレジスタを持っているので、テーブルの別のフィールドの値で新しいフィールドを埋めたいと思っています。独自のフィールドを追加して記入してください

例えば、それが掲示しているテーブル、私はuniqeとなる新しいフィールド名を追加しています、そしてすべての古いレジスタがフィールド名のフィールド名をフィールドemailに記入したいとします。

どうすればいいですか?私は移行でそれをしますか?以下のような:

def change do 
    alter table(:posts) do 
    add :name, :string, null: false, default: :email 
    end 

    create unique_index(:posts, [:name]) 
end 

またはモデルでは?

少しお手伝いしてください、ありがとうございます。あなたがこれを行うにはエクトのupdate_allを使用する必要が

答えて

5

alias Myapp.Repo 
alias Myapp.Post 
import Ecto.Query 

from(p in Post, update: [set: [name: p.old_name]]) 
|> Repo.update_all([]) 

ビーイングは、あなたの古いフィールドをOLD_NAMEし、古い値をしたいフィールドに名前を付けます。

が、これは多くのことができます、Ecto.Queryドキュメントhttps://hexdocs.pm/ecto/Ecto.Repo.html#c:update_all/3

+0

優秀を参照してください。ありがとう – SSM89

関連する問題