如何在bookshelf.js上一次保存多个寄存器

时间:2015-05-20 18:28:42

标签: mysql node.js bookshelf.js

使用以下json:

{

    "name" : "Teste",
    "username" : "teste1",
    "password" : "teste1",
    "email" : "teste2@teste",
    "photo" : "teste",
    "description" : "teste",
    "company_posts" : [
        {"text": "Oi"},
        {"text": "olá"}
    ]


}

以下代码:  

    company_posts = req.body.company_posts
    delete req.body.company_posts

    bookshelf.Model.extend({
        tableName: 'companies'
    }).forge().save(req.body).then(function(company){

        for(var prop in company_posts){company_posts[prop].company_id = company.id}
        bookshelf.Model.extend({
            tableName: 'companies_posts'
        }).forge().save(company_posts).then(function(company_posts){
            res.send(company_posts)
        })

    })

服务器返回我:

Unhandled rejection Error: ER_WRONG_VALUE_COUNT_ON_ROW: Column count doesn't match value count at row 1

出了什么问题?如果我尝试插入company_posts[0],它就会起作用。

如何一次插入所有company_posts

感谢。

1 个答案:

答案 0 :(得分:1)

我的错误是尝试使用Model而不是Collection

而不是:

bookshelf.Model.extend({
    tableName: 'companies_posts'
// where I use forge() instead of collection()
}).forge().save(company_posts).then(function(company_posts){
    res.send(company_posts)
})

这很好用:

bookshelf.Model.extend({
    tableName: 'companies_posts'
    //where I use collection() and works fine
    }).collection(company_posts).invokeThen('save').then(function(company_posts){
            res.send(company_posts)
})