PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Dapatkan objek bersarang dalam struktur di gorm

Sepertinya Anda ingin melakukan dua hal dengan apa yang Anda miliki:(1) perbarui model sehingga Anda memiliki ikatan hubungan yang tepat, dan (2) gunakan .Preload() metode jika Anda mencoba membuatnya mengaitkan data yang sedang dibaca.

Perubahan Model

Gorm secara otomatis menyimpulkan hubungan berdasarkan nama atribut di struct Anda dan nama struct yang direferensikan. Masalahnya adalah Google atribut tipe GoogleAccount tidak terasosiasi karena gorm sedang mencari type Google struct .

Anda juga kehilangan kunci asing di GoogleAccount . Bagaimana ORM mengetahui GoogleAccount . yang mana untuk dikaitkan dengan Client . mana ? Anda harus menambahkan ClientId ke GoogleAccount . Anda definisi struktur.

Juga, saya akan mengubah kunci utama yang Anda gunakan untuk mengetik uint karena itulah yang menjadi default gorm (kecuali jika Anda memiliki alasan kuat untuk tidak menggunakannya)

Jika saya jadi Anda, saya akan mengubah definisi struct saya menjadi berikut:

type Client struct {
     IdClient       uint            `gorm:"primary_key"`
     Name           string
     PhotoUrl       string
     ApprovalNumber uint16
     Phone          string
     Password       string
     HoursOfNotice  int8
     GoogleAccount  GoogleAccount    // Change this to `GoogleAccount`, the same name of your struct
}

type GoogleAccount struct {
     Id             uint
     ClientId       uint             // Foreign key
     Token          string
}

Untuk informasi lebih lanjut tentang ini, lihat dokumentasi asosiasi di sini:http://gorm. io/associations.html#has-one

Asosiasi pramuat

Sekarang setelah Anda benar-benar menghubungkannya dengan benar, Anda dapat .Preload() dapatkan objek bersarang yang Anda inginkan:

db.Preload("GoogleAccount").First(&user)

Menggunakan .Preload() akan mengisi user.GoogleAccount atribut dengan GoogleAccount yang terkait dengan benar berdasarkan ClientId .

Untuk informasi lebih lanjut tentang ini, lihat dokumentasi pramuat:http://gorm .io/crud.html#preloading-eager-loading



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. KESALAHAN:lebih dari satu baris yang dikembalikan oleh subquery yang digunakan sebagai ekspresi

  2. Memiliki Group By Clauses — GeneralBits elein

  3. Bagaimana perilaku pgbouncer saat penyatuan transaksi diaktifkan dan satu pernyataan dikeluarkan?

  4. Membuat kueri DAU/MAU dari waktu ke waktu (harian)

  5. 2 Cara Mendapatkan Ukuran Database di PostgreSQL