gpt4 book ai didi

mysql - 如何阻止 GORM 按 ID 对我的预加载进行排序?

转载 作者:行者123 更新时间:2023-12-04 13:02:31 25 4
gpt4 key购买 nike

在我的数据库中,我有一个用户表,通过多对多表连接到学校。一所学校有很多工作。我正在尝试为特定用户返回所有学校及其工作。到目前为止,这是我的代码:

var user User
err := db.Where("id = ?", userID).Preload("Schools")
.Preload("Schools.Jobs", func(db *gorm.DB) *gorm.DB {
return db.Order("job.job_reference DESC")
}).First(&user).Error
return &user.Schools, err

Gorm 然后执行以下查询:
SELECT * FROM `user`  WHERE (id = 'foo') ORDER BY `user`.`id` ASC LIMIT 1

SELECT * FROM `school`
INNER JOIN `user_school` ON `user_school`.`school_id` = `school`.`id`
WHERE (`user_school`.`user_id` IN ('foo'))

SELECT * FROM `job` WHERE (`school_id` IN ('1','2'))
ORDER BY job.job_reference DESC,`job`.`id` ASC

前两个生成的 SQL 查询完全符合我的预期,但是最后一个查询尝试按我提供的条件和按 ID 的默认排序进行排序。如果我删除我的特定排序说明,它仍会尝试按 ID 排序。我怎样才能阻止它这样做?

最佳答案

我有同样的问题。当您使用 .First()它需要被某种东西订购。只需在您的示例中更改为使用 Scan反而:

err := db.Where("id = ?", userID).Preload("Schools")
.Preload("Schools.Jobs", func(db *gorm.DB) *gorm.DB {
return db.Order("job.job_reference DESC")
}).Scan(&user).Error
return &user.Schools, err


source: https://github.com/go-gorm/gorm/blob/master/finisher_api.go#L113

关于mysql - 如何阻止 GORM 按 ID 对我的预加载进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52270257/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com