使用 include in (Sequelize) 显示属性而不使用嵌套对象

Man*_*mro 3 associations node.js sequelize.js

我有一个模型 SKUValue ,它与其他两个模型VariantOptionsProductVariant相关联。我创建了一个续集查询,将SKUValue值与VariantOptionsProductVariant “左连接” ,并带来结果。

序列化查询

await SKUValue.findAll({
            where: {
                productId: '7bde8a1d-5f6c-4349-bfda-428399c88291'
            },
            include: [
                {
                    model: VariantOption,
                    attributes: ['name']
                },
                {
                    model: ProductVariant,
                    attributes: ['name']
                }
            ],
            attributes: ['SKUId']
        });
Run Code Online (Sandbox Code Playgroud)

查询结果返回一个数组,其中属性VariantOptionProductVariant是一个嵌套对象,并且只有一个字段。

[
    {
        "SKUId": "72edd3ca-fa12-4234-ba8c-dd008eb416d5",
        "VariantOption": {
            "name": "Large"
        },
        "ProductVariant": {
            "name": "Size"
        }
    },
    {
        "SKUId": "72edd3ca-fa12-4234-ba8c-dd008eb416d5",
        "VariantOption": {
            "name": "Red"
        },
        "ProductVariant": {
            "name": "color"
        }
    }
]
Run Code Online (Sandbox Code Playgroud)

如何以VariantOptionProductVariant的结果不返回嵌套对象而仅返回一个搅拌的方式查询属性。

一般来说,我希望结果是这样的

[
    {
        "SKUId": "72edd3ca-fa12-4234-ba8c-dd008eb416d5",
        "VariantOption.name": "Large",
        "ProductVariant.name": "Size"
    },
    {
        "SKUId": "72edd3ca-fa12-4234-ba8c-dd008eb416d5",
        "VariantOption.name": "Red",
        "ProductVariant.name": "Color"
    }
]
Run Code Online (Sandbox Code Playgroud)

Man*_*mro 6

我已经找到了我的问题的答案。

使用Sequelize.literal,我们可以轻松地将内部属性添加到外部属性中。

return await SKUValue.findAll({
            where: {
                productId: '7bde8a1d-5f6c-4349-bfda-428399c88291'
            },
            include: [
                {
                    model: VariantOption,
                    attributes: []
                },
                {
                    model: ProductVariant,
                    attributes: []
                }
            ],
            attributes: [
                'SKUId',
                [Sequelize.literal('"ProductVariant"."name"'), 'productVariant'],
                [Sequelize.literal('"VariantOption"."name"'), 'variantOption']
            ]
        });
Run Code Online (Sandbox Code Playgroud)