go-gorm/gorm

能否新增WhereIf 根据值过滤条件

Closed this issue · 2 comments

原来是这样的:

db := s.DB.Model(&Role{})
	if query.Code != "" {
		db = db.Where("code like ?", "%"+query.Code)
	}
	if query.Name != "" {
		db = db.Or("name like ?", "%"+query.Name)
	}

现在新增了WhereIf:

// WhereIf 在条件满足时添加 Where 条件
func WhereIf(db *gorm.DB, query string, value interface{}) *gorm.DB {
	switch value.(type) {
	case int:
		if value != 0 {
			return db.Where(query, value)
		}
	case string:
		if value != "" && value != nil {
			return db.Where(query, value)
		}
	case bool:
		if value != false {
			return db.Where(query, value)
		}
	}
	return db
}

由于*gorm.DB是内部类型,因此无法实现链式调用,希望gorm能内置WhereIf和OrIf

The issue has been automatically marked as stale as it missing playground pull request link, which is important to help others understand your issue effectively and make sure the issue hasn't been fixed on latest master, checkout https://github.com/go-gorm/playground for details. it will be closed in 30 days if no further activity occurs. if you are asking question, please use the Question template, most likely your question already answered https://github.com/go-gorm/gorm/issues or described in the document https://gorm.ioSearch Before Asking

jinzhu commented

You can implement similar logic based on Scopes.