Привет, разработчики. Недавно я ударил стену, пытаясь создать слегка продвинутый запрос со многими многими связями и принадлежит ему, и я успешно извлекал их все с помощью GORM, но я хочу отформатировать ответ на мою выигранную структуру, и я могу ' не делайте этого здесь, мой запрос я gorm
var p []modules.Posts
tm := modules.Tags{}
db.First(&tm , tagID)
//tag and posts has many 2 many rel
//post belongs to user
tagMaps := db.Model(&tm).Preload("TagMaps").Preload("User").Related(&p,"Posts")
я пытаюсь отформатировать ответ на что-то вроде этого
[
{
"id": "post_id",
"title": "post_title",
"image" :" post_image",
"tags":[
{"name" : "tag_name" , "id" : "tag_id"},
{"name" : "tag_name" , "id" : "tag_id"},
{"name" : "tag_name" , "id" : "tag_id"}
],
"user":{
"id": "user_id",
"avatar": " user_avatar"
}
}
]
это то, что ответ gorm выглядит правильно знать
{
"id": 2,
"title": "thos lore for other users lorem 2",
"image": "",
"User": {
"ID": 1,
"avatar": "url",
"user_name": "user 5",
"email": "newadmin@test.com",
"password": "password",
"status": "pea",
"google_id": "google",
"facebook_id": "face",
"account_type": "fb",
"CreatedAt": "2020-04-02T20:35:38+02:00",
"UpdatedAt": "2020-04-02T20:35:38+02:00",
"DeletedAt": null,
"Posts": null
},
"UserRefer": 1,
"created_at": "2020-04-02T20:36:05+02:00",
"updated_at": "2020-04-02T20:36:05+02:00",
"deleted_at": null,
"TagMaps": [{
"id": 1,
"tag_name": "asda",
"CreatedAt": "2020-04-15T23:25:05+02:00",
"UpdatedAt": "2020-04-17T21:39:26+02:00",
"DeletedAt": null,
"Posts": null
},
{
"id": 2,
"tag_name": "name",
"CreatedAt": "2020-04-15T23:25:05+02:00",
"UpdatedAt": "2020-04-17T21:39:26+02:00",
"DeletedAt": null,
"Posts": null
}
]
},
это мои текущие структуры
type Posts struct {
ID uint `json: "id"`
Title string `json: "title"`
Image string `json: "image"`
User *User `gorm: "foreignkey:UserRefer"` // use UserRefer as foreign key
UserRefer uint
CreatedAt time.Time `json: "created_at"`
UpdatedAt time.Time `json: "updated_at"`
DeletedAt *time.Time `sql: "index" json: "deleted_at"`
TagMaps []Tags `gorm: "many2many:tag_maps;association_autoupdate:false;association_autocreate:false;"`
}
type Tags struct {
ID uint `gorm: "primary_key" json: "id"`
Name string `json: "tag_name"`
CreatedAt time.Time
UpdatedAt time.Time
DeletedAt *time.Time `sql: "index"`
Posts []*Posts `gorm: "many2many:tag_maps"`
}
type User struct {
ID uint `gorm: "primary_key"`
Avatar string `json: "avatar" `
UserName string `json: "user_name"`
Password string `json: "password"`
Bio string `json: "bio"`
GoogleID string `json: "google_id"`
FacebookID string `json: "facebook_id"`
AccountType string `json: "account_type"`
CreatedAt time.Time
UpdatedAt time.Time
DeletedAt *time.Time `sql: "index"`
// Relationship
Posts *Posts `gorm: "PRELOAD:false"`
}
любой совет будет присваиваться, и мой уровень в go не так хорош, я начал играть с месяцем go