首页 > 解决方案 > 查询多对多 Unscoped 关联(已删除)

问题描述

我有一个带有自定义连接表的 gorm many2many 模型:

type Vehicle struct {
    gorm.Model
    Registration string 
    Users  []User `gorm:"many2many:vehicle_users` 
}

type VehicleUser struct {
    gorm.Model
    VehicleID uint
    UserID uint
}

type User struct {
    gorm.Model
    Vehicles []Vehicle  `gorm:"many2many:vehicle_users`
    Name     string
    OIB      int
}

我想查询所有已删除和未删除的用户及其关联,再次删除和取消删除。

(gorm 1.21.16) 和 MySql 8.0

当我进行这样的查询时:

u := User{}

db.Unscoped().Preload("Vehicles", func(db *gorm.DB) *gorm.DB {
        return db.Unscoped()
    }).Find(&u)

gorm 在后台进行 3 次 SQL 查询

[52.918ms] [rows:4] SELECT * FROM `users`

[14.314ms] [rows:3] SELECT * FROM `vehicle_users` WHERE `vehicle_users`.`user_id` IN (1,2,3,4) AND `vehicle_users`.`deleted_at` IS NULL 

[0.576ms] [rows:2] SELECT * FROM `vehicles` WHERE `vehicles`.`id` IN (4,27)

问题在于连接表上的查询vehicle_users,它只查询未删除的关联。我似乎找不到如何修改连接表上的查询以删除deleted_atIS NULL 子句。正确的方法是什么?

标签: mysqlgogo-gorm

解决方案


推荐阅读