package mySql import ( "errors" "fmt" "github.com/Masterminds/squirrel" "gorm.io/gorm" ) type Delete struct { tableName string wheres []*Where db *gorm.DB } func NewDelete(tableName string, db *gorm.DB) *Delete { return &Delete{tableName: tableName, db: db} } func (t *Delete) WhereRaw(formula string, values ...interface{}) *Delete { t.wheres = append(t.wheres, NewWhere(formula, values...)) return t } func (t *Delete) WhereColumn(formula string, values ...interface{}) *Delete { t.WhereRaw(fmt.Sprintf("`%s` = ?", formula), values...) return t } func (t *Delete) WhereColumnIn(formula string, values ...interface{}) *Delete { t.WhereRaw(fmt.Sprintf("`%s` IN ?", formula), values...) return t } func (t *Delete) Delete() error { mapper, err := t.Mapper() if err != nil { return err } return mapper.Exec().Error } func (t *Delete) Mapper() (*SqlMapper, error) { if len(t.wheres) == 0 || t.wheres[0].Formula == "" { return nil, errors.New("没有where条件不被允许") } squ := squirrel.Delete(fmt.Sprintf("`%s`", t.tableName)) //拼接where for _, where := range t.wheres { squ = squ.Where(where.Formula, where.Values...) } return Mapper(squ.ToSql()).setDB(t.db), nil }