Go Academy · Ders

İlişkilendirmeler

İlişkileri modelleyin

3. ders / 413 adım

İ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
Başlamak ücretsiz

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

  1. Modeller ve AutoMigrate
  2. CRUD İşlemleri
  3. İlişkilendirmeler
  4. Kancalar ve Kapsamlar
← Go Academy Sayfasına Dön