Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Các trường tùy chỉnh trong Many2Many JoinTable

Phương pháp 1

Từ những gì tôi có thể thấy trong tài liệu, đây là một cách rõ ràng mà bạn hiện có thể thực hiện việc này:

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

Ở đây, chúng tôi đang sử dụng mô hình bảng nối thực tế để chèn một hàng với các giá trị mà chúng tôi muốn.

Chúng tôi cũng có thể lọc các truy vấn cho liên kết:

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

Phương pháp 2

Đây là một cách kỳ diệu hơn, bằng cách (ab) sử dụng Context để chuyển các giá trị vào một BeforeSave hook, ngoài SetupJoinTable mã từ bên trên:

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)

Phương pháp này cảm thấy khó hiểu đối với tôi, nhưng nó hoạt động.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL:Quyền truy cập bị từ chối đối với người dùng 'user' @ 'IP_ADDRESS' - Không cho phép truy cập từ xa đối với một số máy chủ đối với các máy chủ khác

  2. Symfony / PHP - Cách tốt nhất để lưu trữ giá trị đơn lẻ

  3. TYPO3:Tôi có thể lấy từ một cơ sở dữ liệu khác trên cùng một máy chủ không?

  4. Tôi nên sử dụng chỉ mục nào khi sử dụng JOIN trên PRIMARY KEY

  5. MySQL có sử dụng lại ID đã xóa khi áp dụng Tự động tăng không