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

Nhận đối tượng lồng nhau trong cấu trúc trong gorm

Có vẻ như bạn sẽ muốn thực hiện hai việc với những gì bạn có:(1) cập nhật mô hình để bạn có mối quan hệ ràng buộc phù hợp và (2) sử dụng .Preload() nếu bạn đang cố gắng lấy nó để liên kết dữ liệu khi đọc.

Thay đổi mô hình

Gorm tự động suy ra các mối quan hệ dựa trên tên của các thuộc tính trong cấu trúc của bạn và tên của cấu trúc được tham chiếu. Vấn đề là Google thuộc tính của loại GoogleAccount không liên kết vì gorm đang tìm kiếm type Google struct .

Bạn cũng thiếu khóa ngoại trên GoogleAccount . Làm cách nào ORM biết được GoogleAccount nào để liên kết với Client nào ? Bạn nên thêm một ClientId vào GoogleAccount của bạn định nghĩa cấu trúc.

Ngoài ra, tôi sẽ thay đổi các khóa chính bạn đang sử dụng để nhập uint vì đó là những gì gorm mặc định (trừ khi bạn có lý do chính đáng để không sử dụng nó)

Nếu tôi là bạn, tôi sẽ thay đổi định nghĩa cấu trúc của mình thành như sau:

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
}

Để biết thêm thông tin về điều này, hãy xem tài liệu liên kết tại đây: http:// gorm. io / Association.html # has-one

Tải trước các liên kết

Bây giờ bạn đã thực sự có liên quan đúng đắn với chúng, bạn có thể .Preload() lấy đối tượng lồng nhau mà bạn muốn:

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

Sử dụng .Preload() sẽ điền user.GoogleAccount thuộc tính với GoogleAccount được liên kết chính xác dựa trên ClientId .

Để biết thêm thông tin về điều này, hãy xem tài liệu tải trước: http:// gorm .io / crud.html # preloading-wish-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. Giá trị đầu tiên và cuối cùng của hàm cửa sổ trong một hàng trong PostgreSQL

  2. Mật khẩu mặc định cho postgreSQL được cài đặt bởi phiên bản Gitlab Omibus là gì?

  3. Chúng ta có thể luôn luôn tìm nạp cột ngày tháng dưới dạng chuỗi (varchar) với quỳ và postgres không?

  4. Chọn từ SUM () của nhiều cột và tham gia vào postgreSQL

  5. Kiểm tra tự động các bản sao lưu PostgreSQL