birlikte iki sütun üzerinde benzersiz bir kısıtlama oluşturma?bu karşılık olur Ecto iki sütunun üzerinde benzersiz bir dizin, nasıl oluştururum Ecto
cevap
A Little sonuçta size bir hata vermek yerine bir istisna durumu sadece modeline unique_index oluşturmak kullanma Patrick cevap
takip.
Hata almak için, değişiklik kümenizde bir kısıtlama ekleyin, ancak bir paremeter olarak, unique_index tarafından oluşturulan dizin adını verebilirsiniz. Taşıma dosyasında Yani
: En Değişiklik listesi Sonra
create unique_index(:your_table, [:col1, :col2], name: :your_index_name)
: Sorunun örnekte görüldüğü gibi
def changeset(model, param \\ :empty) do
model
|> cast(params, @required_fields, @optional_fields)
|> unique_constraint(:name_your_constraint, name: :your_index_name)
end
Sen kompozit anahtarlara sahip isterseniz herhalde
create unique_index(:some_table, [:col1, :col2])
ile birden fazla satıra benzersiz bir dizin oluşturabilir, el SQL çalıştırmak için execute/1
kullanmak gerekir. Kompozit tuşların Ecto ile ne kadar iyi çalıştığından emin değilim, genellikle sadece tablo başına standart seri kimliğiyle uğraşırım.
Bileşik anahtar yaklaşımıyla devam ederseniz, NOT NULL
kısıtlamalarının gerekli olmadığını düşünüyorum. Bileşik anahtar, sütunların boş olmadığından zaten zorlamalıdır.
unique_index
bileşik birincil anahtar oluşturun ederim. Benzersiz bir kısıtlama yaratıyor. Eğer bir bileşik birincil anahtar oluşturmak istiyor yoksa
(not: önerilmez Ecto ile çalışıldığında), there's more information here:
Göç:
defmodule HelloPhoenix.Repo.Migrations.CreatePlayer do
use Ecto.Migration
def change do
create table(:players, primary_key: false) do
add :first_name, :string, primary_key: true
add :last_name, :string, primary_key: true
add :position, :string
add :number, :integer
...
Şema:
defmodule HelloPhoenix.Player do
use Ecto.Schema
@primary_key false
schema "players" do
field :first_name, :string, primary_key: true
field :last_name, :string, primary_key: true
field :position, :string
field :number, :integer
...
Çoğu durumda, unique_index
istediğiniz gibi.
- 1. Ecto
- 2. Özgün_konu ayarlama Ecto
- 3. has_many, Ecto
- 4. Ecto phoenix.gen.html
- 5. Elixir Ecto: Kendine referanslı yabancı bir anahtarı nasıl oluştururum?
- 6. Çoklu veri tabanları Ecto
- 7. Ecto modeline rastgele ve benzersiz bir alan ekleme
- 8. Ecto ile Ham SQL
- 9. Ecto & Elixir ile varsayılan datetime
- 10. Polimorfik dernek Ecto ile nasıl çalışır?
- 11. İki sütunda benzersiz bir dizin nasıl uygulanır
- 12. elixir, ecto, nerede olduğunubenin zamanını karşılaştır
- 13. İksir Ecto: Birden katılır ve yeniden kullanılabilir/composable sorgular Ecto yılında
- 14. Bir Ecto değişiklik kümesini repo'ya yerleştirmeden önce nasıl değiştirilir?
- 15. Varsayılan olarak Ecto Derneklerini Önceden Oluşturma
- 16. Elixir ile "belongs_to" derneği Ecto ile nasıl gidilir?
- 17. Elixir + Ecto: [dizi] WHERE IN IN nasıl yapılır?
- 18. Ecto test veritabanı nasıl geri alınır, sıfırlanır veya düşer?
- 19. ecto (=> 0.11) içinde MySQL saklı yordamı nasıl arayabilirim?
- 20. Phoenix/Ecto ile oluşturulan PostgreSQL veritabanı nasıl temizlenir
- 21. Ecto ile WHERE IN array cümlesi nasıl oluşturulur?
- 22. Ecto modeli `undefined işlevi:` iex *** makro ile çalışırken ***
- 23. Bir Ecto modelinde bir sütuna sahip bir sütun adı nasıl değiştirilir?
- 24. Mongodb benzersiz seyrek dizin
- 25. datamapper çok alanlı benzersiz dizin
- 26. İki sütunun ortalamasını nasıl çalışırım? Microsoft Access
- 27. Bir sütunun benzersiz bir kısıtlaması olup olmadığını bulun
- 28. Bir veri çerçevesindeki iki sütunun ortalamasını hesaplayın
- 29. Varlık veri modeli, benzersiz dizin
- 30. mysql benzersiz dizin sütun kümesinden
Bu, kabul edilen yanıt imo olarak işaretlenmelidir. @ TheSquad, does: name_your_constraint: col1 veya: col2 bu bağlamda olması gerekir? Referans: https://hexdocs.pm/ecto/Ecto.Changeset.html#unique_constraint/3 – Olshansk
kesinlikle değil, kısıtlama karşılanmadığında kapsamlı bir hata mesajı almak istediğiniz herhangi bir atomu koyabilirsiniz – TheSquad