İlişkilendirmeler
İlişkileri modelleyin
İlişkilendirmeler, CoddyKit'te ücretsiz bir Go Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Go Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Go Academy kursu toplamda 4 dersten oluşur.
İlişkileri Modelleme
GORM ilişkileri, tablolar arasındaki bağlantıları yapı alanlarına eşler. Dört tür vardır: bire bir sahip olma, birden çoğa sahip olma, ait olma ve çoktan çoğa.
- Dış anahtarları yapı alanları olarak ifade edin
- İlişkili verileri otomatik olarak yükleyin
- İlişkili kayıtları birlikte oluşturun
Birden Çoğa
Bir kullanıcının birçok gönderisi olabilir. Üst kayıt, alt kayıtların bir dilimini tutar; alt kayıt da üst kayda geri bağlanan bir dış anahtar tutar.
type User struct {
gorm.Model
Name string
Posts []Post
}
type Post struct {
gorm.Model
Title string
UserID uint
}Ait Olma
Çocuğun bakış açısından bir gönderi bir kullanıcıya aittir. Bunu ifade etmek için bir User alanı ile UserID dış anahtarını ekleyin.
type Post struct {
gorm.Model
Title string
UserID uint
User User
}Bire Bir
Bire bir ilişki, tek bir ilişkili kayıt içermesi dışında birden çoğa ilişki gibidir; örneğin bir kullanıcının tek bir profili olması. Dış anahtarı alt kayıt tutar.
type User struct {
gorm.Model
Profile Profile
}
type Profile struct {
gorm.Model
UserID uint
Bio string
}Çoktan Çoğa
Kullanıcılar ve roller, bir birleştirme tablosu üzerinden çoktan çoğa ilişkilidir. many2many etiketi bu birleştirme tablosunu adlandırır; bu etiket Roles alanından sonra ters tırnak içinde gorm:"many2many:user_roles;" olarak yazılır.
type User struct {
gorm.Model
// Roles field tag: gorm:"many2many:user_roles;"
Roles []Role
}
type Role struct {
gorm.Model
Name string
}Preload
Varsayılan olarak ilişkili veriler yüklenmez. Preload, GORM'a ilişkileri ayrı bir sorguda getirmesini söyleyerek elle yapılacak ayrı bir aramayı önler.
var user User
db.Preload("Posts").First(&user, 1)
fmt.Println(len(user.Posts))İç İçe Preload
Noktalı bir yol kullanarak birden çok düzeyde ön yükleme yapabilirsiniz; böylece bir kullanıcının gönderileri ve her gönderinin yorumları tek bir çağrı zincirinde yüklenir.
db.Preload("Posts.Comments").First(&user, 1)Çalıştırılabilir İlişki Benzetimi
GORM bir veritabanına ihtiyaç duyar; bu nedenle çalıştırılabilir örnek, bellek içi dilimleri kullanarak birden çoğa ilişkiyi ve ön yüklemeyi modeller.
package main
import "fmt"
type Post struct {
ID int
UserID int
Title string
}
type User struct {
ID int
Name string
Posts []Post
}
func preload(u *User, all []Post) {
for _, p := range all {
if p.UserID == u.ID {
u.Posts = append(u.Posts, p)
}
}
}
func main() {
u := User{ID: 1, Name: "Ada"}
all := []Post{{1, 1, "Hello"}, {2, 1, "World"}, {3, 2, "Other"}}
preload(&u, all)
fmt.Printf("%s has %d posts\n", u.Name, len(u.Posts))
}İlişkilerle Oluşturma
Create işleminden önce dilim alanını ayarlarsanız GORM, üst kaydı ve alt kayıtlarını birlikte ekler ve dış anahtarları otomatik olarak birbirine bağlar.
user := User{Name: "Ada", Posts: []Post{{Title: "Hi"}}}
db.Create(&user)N Artı Bir Sorunu
Üst kayıtlar arasında döngü kurup her yinelemede alt kayıtları sorgulamak, her üst kayıt için bir sorguya ve dolayısıyla N+1 sorununa neden olur. Preload, ilişkili verileri tek bir ek sorguda toplu olarak getirerek bu sorunu çözer.
İlişki Kipi
Association API'si, örneğin db.Model(&user).Association("Posts").Append(&post) kullanımında, dış anahtarları elle yönetmeden ilişkili kayıtları ekler, değiştirir, siler veya temizler.
Hızlı Kontrol
İlişkiler hakkındaki bilginizi sınayın.
Özet
İlişkileri öğrendiniz:
- bire bir, birden çoğa, ait olma ve many2many model ilişkileri
- Dış anahtarlar UserID gibi yapı alanlarıdır
- Preload ilişkileri yükler ve N+1 sorununu önler
- Alt kayıtları olan bir üst kayıt oluşturmak dış anahtarları birbirine bağlar
- İlişki kipi ilişkileri ekler, değiştirir veya temizler
Yapay zeka eğitmeniyle Go öğren — ücretsiz
Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.
- Kurslar
- 51
- Dersler
- 203
Sıkça Sorulan Sorular
“İlişkilendirmeler” dersi ücretsiz mi?
Evet — “İlişkilendirmeler” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Go Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Go Academy kursu toplamda 4 dersten oluşur.
“İlişkilendirmeler” dersinde ne öğreneceğim?
İlişkileri modelleyin Go Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Go Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Go Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.
“İlişkilendirmeler” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Go Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Go Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Modeller ve AutoMigrate
- CRUD İşlemleri
- İlişkilendirmeler
- Kancalar ve Kapsamlar