56 lines
1.2 KiB
Go
56 lines
1.2 KiB
Go
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
|
|
}
|