我在Gorm中做了一个简单的查询:err := db.Preload("users"). Where("orders.created_at >= now() - interval 3 day"). Find(&orders). Error我也试过这种方式:err := db.Select("orders.*, users.*"). Where("orders.created_at >= now() - interval 3 day and users.first_name != ''"). Joins("left join users on users.customer_id = orders.customer_id"). Find(&orders). Error这应该填充一个“订单”结构,其中有一个“用户用户”结构。当我记录我的查询时,它看起来很好,当我将其复制并粘贴到Phpmyadmin中时,它可以完美地工作,但是在Go中,我的结构是空的!井。。。“用户”部分为空。订单部分已正确填写。有谁知道我做错了什么?我的订单结构:type Orders struct { CustomerId int Users Users `gorm:"foreignKey:customer_id"` Method string Amount float64 Subtotal float64 Total float64 Btw float64 Status string OrderMailSend int}和我的用户结构:type Users struct { CustomerId int Email string FirstName string LastName string}如果我使用我的第一个查询并调用它(在Go中),我将收到以下结果:{ "CustomerId": 211197, "Users": { "CustomerId": 0, "Email": "", "FirstName": "", "LastName": "" }, "Method": "iDEAL", "Amount": 10, "Subtotal": 10, "Total": 10, "Btw": 0, "Status": "paid", "OrderMailSend": 0}以及错误:无法为模型预加载字段用户。订单如果我只是将查询本身复制并粘贴到phpmyadmin控制台中并运行它,我确实会得到完整的结果,即一个订单,其中用户连接到它。所以这意味着查询本身是好的,我侦察。在数据库中,订单表 (customer_id) 具有用户表的外键 (customer_id)。
1 回答

忽然笑
TA贡献1806条经验 获得超5个赞
第一件事:尝试将用户密钥字段重命名为CustomerID,这是gorm似乎也喜欢的方式。
此外,您的订单结构没有主键。这可能会把事情搞砸。
这样,第一个查询应该可以正常工作。
第二个查询不会神奇地填充结构,因为该方法仅扫描顶级实体。Users
Find
Joins
使用您使用的自定义连接SQL不会告诉gorm也将额外的字段扫描到子实体中。
但是,由于这是一对一的关系,因此您应该能够使用联接预加载,这会导致与预加载查询类似的事情,但所有这些都在单个数据库查询中。
err := db. Joins("Users"). Where("orders.created_at >= now() - interval 3 day AND users.first_name != ''"). Find(&orders). Error
- 1 回答
- 0 关注
- 179 浏览
添加回答
举报
0/150
提交
取消