Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

Many2Many JoinTable में कस्टम फ़ील्ड

विधि 1

डॉक्स में जो मैं देख सकता हूं, उससे यहां एक साफ तरीका है कि आप वर्तमान में ऐसा कर सकते हैं:

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,
})

यहां हम अपने इच्छित मानों के साथ एक पंक्ति सम्मिलित करने के लिए वास्तविक जॉइन टेबल मॉडल का उपयोग कर रहे हैं।

हम एसोसिएशन के लिए प्रश्नों को भी फ़िल्टर कर सकते हैं:

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

विधि 2

Context . का उपयोग करके (ab) द्वारा एक अधिक जादुई तरीका यहां दिया गया है मानों को BeforeSave . में पास करने के लिए हुक, SetupJoinTable . के अलावा ऊपर से कोड:

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)

यह तरीका मुझे मुश्किल लगता है, लेकिन यह काम करता है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Php . में दिनांक परिवर्तित करते समय गलत तिथि

  2. क्या मैं MySQL में पैरामीटर के साथ दृश्य बना सकता हूं?

  3. PHP MYSQL कनेक्ट नहीं हो सका (HY000/2002)

  4. 500 आंतरिक सर्वर त्रुटि?

  5. रिकॉर्ड की गहराई पाने के लिए mysql, माता-पिता और पूर्वजों के रिकॉर्ड गिनें