LabelModel.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. package models
  2. import (
  3. "strings"
  4. "github.com/beego/beego/v2/client/orm"
  5. "github.com/beego/beego/v2/core/logs"
  6. "github.com/mindoc-org/mindoc/conf"
  7. )
  8. type Label struct {
  9. LabelId int `orm:"column(label_id);pk;auto;unique;" json:"label_id"`
  10. LabelName string `orm:"column(label_name);size(50);unique" json:"label_name"`
  11. BookNumber int `orm:"column(book_number)" json:"book_number"`
  12. }
  13. // TableName 获取对应数据库表名.
  14. func (m *Label) TableName() string {
  15. return "label"
  16. }
  17. // TableEngine 获取数据使用的引擎.
  18. func (m *Label) TableEngine() string {
  19. return "INNODB"
  20. }
  21. func (m *Label) TableNameWithPrefix() string {
  22. return conf.GetDatabasePrefix() + m.TableName()
  23. }
  24. func NewLabel() *Label {
  25. return &Label{}
  26. }
  27. func (m *Label) FindFirst(field string, value interface{}) (*Label, error) {
  28. o := orm.NewOrm()
  29. err := o.QueryTable(m.TableNameWithPrefix()).Filter(field, value).One(m)
  30. return m, err
  31. }
  32. //插入或更新标签.
  33. func (m *Label) InsertOrUpdate(labelName string) error {
  34. o := orm.NewOrm()
  35. err := o.QueryTable(m.TableNameWithPrefix()).Filter("label_name", labelName).One(m)
  36. if err != nil && err != orm.ErrNoRows {
  37. return err
  38. }
  39. count, _ := o.QueryTable(NewBook().TableNameWithPrefix()).Filter("label__icontains", labelName).Count()
  40. m.BookNumber = int(count)
  41. m.LabelName = labelName
  42. if err == orm.ErrNoRows {
  43. err = nil
  44. m.LabelName = labelName
  45. _, err = o.Insert(m)
  46. } else {
  47. _, err = o.Update(m)
  48. }
  49. return err
  50. }
  51. //批量插入或更新标签.
  52. func (m *Label) InsertOrUpdateMulti(labels string) {
  53. if labels != "" {
  54. labelArray := strings.Split(labels, ",")
  55. for _, label := range labelArray {
  56. if label != "" {
  57. NewLabel().InsertOrUpdate(label)
  58. }
  59. }
  60. }
  61. }
  62. //删除标签
  63. func (m *Label) Delete() error {
  64. o := orm.NewOrm()
  65. _, err := o.Raw("DELETE FROM "+m.TableNameWithPrefix()+" WHERE label_id= ?", m.LabelId).Exec()
  66. if err != nil {
  67. return err
  68. }
  69. return nil
  70. }
  71. //分页查找标签.
  72. func (m *Label) FindToPager(pageIndex, pageSize int) (labels []*Label, totalCount int, err error) {
  73. o := orm.NewOrm()
  74. count, err := o.QueryTable(m.TableNameWithPrefix()).Count()
  75. if err != nil {
  76. return
  77. }
  78. totalCount = int(count)
  79. offset := (pageIndex - 1) * pageSize
  80. _, err = o.QueryTable(m.TableNameWithPrefix()).OrderBy("-book_number").Offset(offset).Limit(pageSize).All(&labels)
  81. if err == orm.ErrNoRows {
  82. logs.Info("没有查询到标签 ->", err)
  83. err = nil
  84. return
  85. }
  86. return
  87. }