Gorm Go - 使用空的主键片段进行查询

Gorm Go - Query with an empty slice of primary keys

Struct & Map Conditions 的 Gorm 文档提供了以下代码段,用于查询 table 和主键片段

// Slice of primary keys
db.Where([]int64{20, 21, 22}).Find(&users)
// SELECT * FROM users WHERE id IN (20, 21, 22);

但是,如果切片为空,则返回所有记录。查看 Find 函数的 source code 我可以看到只有在 len(conds) > 0

时才添加条件
// Find find records that match given conditions
func (db *DB) Find(dest interface{}, conds ...interface{}) (tx *DB) {
    tx = db.getInstance()
    if len(conds) > 0 {
        if exprs := tx.Statement.BuildCondition(conds[0], conds[1:]...); len(exprs) > 0 {
            tx.Statement.AddClause(clause.Where{Exprs: exprs})
        }
    }
    tx.Statement.Dest = dest
    return tx.callbacks.Query().Execute(tx)
}

这与我的 SQLite 命令行 returns 相反。如果条件为空则不返回任何记录(因为它们都有主键)

-- no records returned
SELECT * FROM my_table WHERE id IN ();

问题

由于主键从 1 增加,0 id 可用于空查询。

ids := []int64{20, 21, 22}
db.Where(append([]int64{0}, ids...)).Find(&users)