一、表结构
CREATE TABLE `orders` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`order_no` varchar(32) NOT NULL DEFAULT '',
`orderable_id` int unsigned NOT NULL DEFAULT '0',
`orderable_type` char(30) NOT NULL DEFAULT '',
`status` tinyint unsigned NOT NULL DEFAULT '0',
`created_at` datetime NOT NULL,
`updated_at` datetime NOT NULL,
`deleted_at` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
CREATE TABLE `phone` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`phone_name` varchar(50) NOT NULL DEFAULT '',
`phone_model` varchar(30) NOT NULL DEFAULT '',
`status` tinyint unsigned NOT NULL DEFAULT '0',
`created_at` datetime NOT NULL,
`updated_at` datetime NOT NULL,
`deleted_at` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1003 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
CREATE TABLE `cars` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`car_name` varchar(50) NOT NULL DEFAULT '',
`car_model` varchar(30) NOT NULL DEFAULT '',
`status` tinyint unsigned NOT NULL DEFAULT '0',
`created_at` datetime NOT NULL,
`updated_at` datetime NOT NULL,
`deleted_at` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1003 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
二、接口定义
// LoaderAble 接口定义数据加载行为
type LoaderAble interface {
LoadAble(IDs []int) (map[int]any, error)
}
// LoadAbleItem 接口定义了可加载项的通用方法
type LoadAbleItem interface {
GetAbleType() string // 获取类型键值
GetAbleID() int // 获取ID
SetLoadedAbleData(data any) // 设置加载的数据
}
三、模型定义并实现接口
type Order struct {
Id int `json:"id"`
OrderNo string `json:"order_no"`
OrderableId int `json:"orderable_id"`
OrderableType string `json:"orderable_type"`
Orderable any `json:"orderable" gorm:"-"`
Status uint8 `json:"status"`
CreatedAt *time.Time `json:"created_at"`
UpdatedAt *time.Time `json:"updated_at"`
DeletedAt gorm.DeletedAt `json:"deleted_at"`
}
func (tb *Order) TableName() string {
return "orders"
}
func (tb *Order) GetAbleType() string {
return tb.OrderableType
}
func (tb *Order) GetAbleID() int {
return tb.OrderableId
}
func (tb *Order) SetLoadedAbleData(data any) {
tb.Orderable = data
}
//---------