2016-07-06 19 views
2

Ich arbeite mit Elixir und Phoenix, ich habe eine Tabelle und ich möchte ein neues Feld zu dieser Tabelle hinzufügen, aber ich möchte dieses Feld einzigartig sein. Da meine DataBase bereits eine Reihe von Registern in dieser Tabelle hat, möchte ich das neue Feld mit dem Wert aus einem anderen Feld der Tabelle füllen.Fügen Sie ein einzigartiges Feld hinzu und füllen Sie es

Zum Beispiel die Tabelle es Beiträge, Ich bin der neue Feldname hinzufügen, die uniqe wäre, und möchte, dass alle alten Register füllen den Feldnamen mit dem Wert in der Feld-E-Mail.

Wie kann ich das tun? Mache ich das bei der Migration? wie:

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

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

oder im Modell?

Bitte ein wenig Hilfe in ihr wäre super danke.

Antwort

5

Sie benötigen update_all Ecto zu gebrauchen, dies zu tun:

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

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

old_name Ihr altes Feld zu sein und den Namen des Feldes, wo Sie den alten Wert wollen.

Siehe Ecto.Query docs https://hexdocs.pm/ecto/Ecto.Repo.html#c:update_all/3

+0

Excelent, hilft dies viel. Vielen Dank – SSM89

Verwandte Themen