users使用gorm,我為和product_prices表創建了以下模型
// model for table `users`
type User struct {
Id uint64 `json:"id" gorm:"primaryKey"`
Email string `json:"email" gorm:"unique"`
Password []byte `json:"-"`
CreatedOn time.Time `json:"created_on" gorm:"<-:create"`
UpdatedOn time.Time `json:"updated_on"`
}
// model for table `product_prices`
type ProductPrice struct {
Id uint64 `json:"id" gorm:"primaryKey"`
Price float64 `json:"price"`
Direction string `json:"direction"`
NotificationMethod string `json:"notification_method"`
CreatedOn time.Time `json:"created_on,omitempty" gorm:"<-:create"`
UpdatedOn time.Time `json:"updated_on,omitempty"`
LastNotified time.Time `json:"last_notified,omitempty"`
UserId uint64 `json:"user_id"`
User User `json:"-" gorm:"foreignKey:UserId"`
}
我想做一些類似在product_prices和users表之間執行以下sql連接的事情
select product_prices.id, product_prices.price, product_prices.created_on, users.email as user_email, users.created_on as user_created_on from product_prices join users on product_prices.user_id=users.id;
這是我嘗試過但仍然不走運的許多事情之一,這要歸功于檔案頁面https://gorm.io/docs/query.html#Joins不夠清晰, 我還想遍歷行
按照這里的檔案https://gorm.io/docs/query.html#Joins我嘗試了以下
// struct for result of join query
type ProductPriceUser struct {
Id uint64 `json:"id"`
Price float64 `json:"price"`
CreatedOn time.Time `json:"created_on,omitempty"`
UserEmail User `json:"user_email"`
UserCreatedOn User `json:"user_created_on"`
}
var productPrice ProductPrice
database.DB.Model(&productPrice{}).Select("productPrices.id, productPrices.price, productPrices.created_on, users.email as users_email, users.created_on as users_created_on").Joins("join user on productPrices.user_id = users.id").Scan(&ProductPriceUser{})
for _, row := range ProductPriceUser {
fmt.Println("values: ", row.Id, row.Price, row.CreatedOn, row.UserEmail, row.UserCreatedOn, "\n")
}
但是我遇到了各種各樣的錯誤,我做錯了什么,我如何得到我想要的,如上所述?
謝謝!
uj5u.com熱心網友回復:
一種可能的解決方案是做這樣的事情(假設你的資料庫表被命名為product_pricesand users):
list := []ProductPriceUser{}
err := database.DB.Table("product_prices").
Join("JOIN users ON users.id=product_prices.user_id").
Select("product_prices.id, product_prices.price, product_prices.created_on, users.email as user_email, users.created_on as user_created_on").
Find(&list).Error
if err != nil {
// handle error
}
然后,您可以遍歷list以獲取每條記錄。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/422033.html
標籤:
上一篇:如何更新表ssn值以具有破折號?
