【问题标题】:Insert multi rows in Adonisjs doesn't work在 Adonisjs 中插入多行不起作用
【发布时间】:2023-03-15 21:16:01
【问题描述】:

我在使用 adonisjs 插入多行时遇到问题。我在 json 数组中有一个表单数据,当我尝试使用 request.post 插入此数据以获取数组索引时,它不起作用

这是我在 json 数组中的数据示例:

[
    {
        "id_cart" : "1",
        "id_product" : "1",
        "shop_id" : "2",
        "price" : "10000"
    },
    {
        "id_cart" : "1",
        "id_product" : "2",
        "shop_id" : "3",
        "price" : "20000"
    }
]

然后这是我的控制器:

const id_cart = nanoid(25)

const detailInfo = request.post(['id_cart','id_product','shop_id','price'])
const detail = new Detail()

detail.id_cart = id_cart
detail.id_product = detailInfo.id_product
detail.shop_id = detailInfo.shop_id
detail.price = detailInfo.price

await detail.save()

id_product, shop_id, and price 列的结果为 null。我的代码有什么问题?

【问题讨论】:

    标签: node.js multidimensional-array adonis.js


    【解决方案1】:

    像这样格式化JSON 输入

    {
        "products": [
            {
                "id_cart": "1",
                "id_product": "1",
                "shop_id": "2",
                "price": "10000"
            },
            {
                "id_cart": "1",
                "id_product": "2",
                "shop_id": "3",
                "price": "20000"
            }
        ]
    }
    

    如下插入数据库:

    const productList = request.input("products");
    await Product.createMany(productList);
    

    【讨论】:

    • 如果我想手动从productList输入的json数组中添加新的键值id,但我必须自己生成它(使用nanoid)?我无法添加该值,因为输入类型是 request.input()
    • @isnainibarochatun 你可以用阿多尼斯钩子做,在这里阅读更多adonisjs.com/docs/4.1/database-hooks
    【解决方案2】:

    id_product、shop_id 和 price 列的结果为空。我的代码有什么问题?

    因为结果有几个对象。

    你可以使用Request collection

    // Example from official documentation
    const users = request.collect(['username', 'age'])
    
    // output
    [{ username: 'virk', age: 26 }, { username: 'nikk', age: 25 }]
    
    // save to db
    await User.createMany(users)
    

    获取完整的结果并循环处理

    const detailInfo = request.all() //Array
    

    并创建foreach

    detailInfo.rows.forEach(async (info) => {
        ...
    })
    

    【讨论】:

    • 很抱歉,我尝试使用request.collectcreateMany,但是所有数据都没有进入数据库,当尝试使用forEach 时它只是错误detailInfo.forEach 不是函数
    • detailInfo.forEach 不是函数 -> 试试 detailInfo.rows.foreach(...)
    • 对于collect()的方法,外键可能会导致问题
    • 使用rows.foreach 仍然返回无法读取未定义的属性'foreach'
    • 有什么办法可以检查外键的问题在哪里?
    猜你喜欢
    • 2017-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-18
    • 2014-04-21
    相关资源
    最近更新 更多