Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Bidang khusus di Many2Many JoinTable

Metode 1

Dari apa yang saya lihat di dokumen, berikut adalah cara bersih yang dapat Anda lakukan saat ini:

DB.SetupJoinTable(&Person{}, "Addresses", &PersonAddress{})

addr1 := Address{Name: "addr1"}
DB.Create(&addr1)

addr2 := Address{Name: "addr2"}
DB.Create(&addr2)

person := Person{Name: "jinzhu"}
DB.Create(&person)

// Add an association with default values (i.e. Home = false)
DB.Model(&person).Association("Addresses").Append(&addr1)

// Add an association with custom values
DB.Create(&PersonAddress{
    PersonID:  person.ID,
    AddressID: addr2.ID,
    Home:      true,
})

Di sini kita menggunakan model tabel gabungan yang sebenarnya untuk menyisipkan baris dengan nilai yang kita inginkan.

Kami juga dapat memfilter kueri untuk asosiasi:

addr := Address{}
// Query association with filters on join table
DB.Where("person_addresses.home = true").
    Model(&person).
    Association("Addresses").
    Find(&addr)

Metode 2

Inilah cara yang lebih ajaib, dengan (ab)menggunakan Context untuk meneruskan nilai ke BeforeSave kait, selain SetupJoinTable kode dari atas:

func (pa *PersonAddress) BeforeSave(tx *gorm.DB) error {
    home, ok := tx.Statement.Context.Value("home").(bool)
    if ok {
        pa.Home = home
    }
    return nil
}

// ...

DB.WithContext(context.WithValue(context.Background(), "home", true)).
    Model(&person).
    Association("Addresses").
    Append(&addr2)

Metode ini terasa menjijikkan bagi saya, tetapi berhasil.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Klausa WHERE yang dibuat secara dinamis PHP/MySQL

  2. Apa yang lebih cepat/lebih baik untuk digunakan:fungsi MySQL atau PHP md5?

  3. Bagaimana mengatur DAN kondisi ke SEMUA kolom - php

  4. Menghapus Duplikat di MySQL

  5. Gunakan PHP untuk membuang nilai mysql ke file JSON