Как вставить несколько строк - PullRequest
0 голосов
/ 08 января 2019

Я на самом деле очень новичок в Go, поэтому хотел узнать, как лучше всего вставить такие данные

{
    "moduleId":"M101",
    "topicId":["tt","ee"]
}

в базе данных MySQL с использованием Go

type TopicModule struct {
    ModuleId string   `json:"moduleId" bson:"moduleId" form:"moduleId"`
    TopicId  []string `json:"topicId" bson:"topicId" form:"topicId"`
    AddedBy  string   `json:"addedBy" bson:"addedBy" form:"addedBy"`
}

func AddTopicModuleHandler(ctx iris.Context) {
    topicmodule := new(TopicModule)
    if err := ctx.ReadJSON(topicmodule); err != nil {
        panic(err)
        ctx.StatusCode(400)
        return
    }
    log.Println(topicmodule.TopicId)
    code, created := AddTopicModule(*topicmodule)

    if created {
        ctx.JSON(topicmodule)
        ctx.Redirect("/api/module/"+code, iris.StatusCreated)
    }
}

func AddTopicModule(atm TopicModule) (string, bool) {

    log.Println("the topic is ", atm.TopicId)
    db := DatabaseAccess()
    tx, _ := db.Begin()
    stmt, err := tx.Prepare("insert into ModuleTopic(module_id, topic_id, added_by) Values(?,?,?) ")
    res, err := stmt.Exec(atm.ModuleId, "Ricky")
    res1, err := stmt.Exec(atm.ModuleId, "Ric")

    if err != nil {
        tx.Rollback()
    }
    tx.Commit()
    log.Println(res, res1)
    return "aa", true
}

Ожидаемый результат - добавить массив JSON в MySQL.

1 Ответ

0 голосов
/ 08 января 2019

Вы не можете просто вставить массив в базу данных. Вместо этого вы должны зацикливаться на TopicId и вставлять их один за другим

func AddTopicModule(atm TopicModule) (string, bool) {
    log.Println("the topic is ", atm.TopicId)
    db := DatabaseAccess()
    tx, _ := db.Begin()
    for _, value = range(atm.TopicId){
        stmt, err := tx.Prepare("insert into ModuleTopic(module_id, topic_id, added_by) Values(?,?,?) ")
        if err != nil {
            return "", false
        }
        res, err := stmt.Exec(atm.ModuleId, value, "Harsh")
        if err != nil {
            tx.Rollback()
            return "", false
        }
        tx.Commit()
    }
    return "aa", true
}

Это создаст 2 записи в базе данных для предоставленного вами JSON.

|---------------------|------------------|------------------|
|      module_id      |     topic_id     |     added_by     |
|---------------------|------------------|------------------|
|          M101       |         tt       |     Harsh        |
|---------------------|------------------|------------------|
|          M101       |         ee       |     Harsh        |
|---------------------|------------------|------------------|

Чтобы получить их, просто запросите вашу базу данных:

SELECT * FROM ModuleTopic WHERE module_id = M101;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...