最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

所有的嵌套行没有在表中插入

运维笔记admin18浏览0评论

所有的嵌套行没有在表中插入

所有的嵌套行没有在表中插入

我想在我的分类表的树结构。

所以我尝试这样做:

分类模式是这样的:

import * as Sequelize from 'sequelize';

export default class CategoriesModel extends Sequelize.Model {
    static init(sequelize, DataTypes) {
        return super.init({
            name: {
                type: DataTypes.STRING,
            },
        }, {
            modelName: 'categories',
            sequelize,
        });
    }
}

在我CategoriesModel类关联的样子:


    static associate({ Categories }) {
        this.nestedCategories = this.hasMany(Categories, {
            as: 'nestedCategories',
            foreignKey: 'parentId',
        });
    }

并且当我试图插入行,例如:

sequelize.sync({ force: true }).then(() => {
    models.Categories.create({
        name: 'parent',
        nestedCategories: [
            {
                name: 'child 1',
            }, 
            {
                name: 'child 2',
                nestedCategories: [
                    {
                        name: 'child 3',
                    }
                ],
            },
        ],
    }, {
        include: [models.Categories.nestedCategories]
    }).then(cat => {
        console.log(cat.toJSON());
    })
});

结果是:

{ 
  id: 1,
  name: 'parent',
  nestedCategories:
   [ { id: 2,
       name: 'child 1',
       parentId: 1,
       updatedAt: 2019-02-05T08:39:45.655Z,
       createdAt: 2019-02-05T08:39:45.655Z },
     { id: 3,
       name: 'child 2',
       parentId: 1,
       updatedAt: 2019-02-05T08:39:45.657Z,
       createdAt: 2019-02-05T08:39:45.657Z } ],
  updatedAt: 2019-02-05T08:39:45.624Z,
  createdAt: 2019-02-05T08:39:45.624Z,
  parentId: null 
}

孩子3没有在表中插入。

我不明白我在做什么错?

回答如下:

你需要指定每个嵌套类之一,包括为了使您的要求正确分析。

在这里,我做了一个函数来做到这一点递归基于模型要创建的:

function buildIncludeRecursive(model, includeTemplate) {
    const include = Object.assign({}, includeTemplate);
    let currInclude = include;
    let currModel = model;
    while(currModel[includeTemplate.as]){
        currInclude.include = [Object.assign({}, includeTemplate)];
        currInclude = currInclude.includes[0];
        currModel = currModel[includeTemplate.as];
    }
    return include;
}

const model = {
     name: 'parent',
     nestedCategories: [
         { name: 'child 1' }, 
         {
             name: 'child 2',
             nestedCategories: [
                { name: 'child 3' }
             ]
        },
    ],
};

const includeTemplate = {
    model: models.Categories,
    as: 'nestedCategories'
};

model.categories.create(model, { 
    include: buildIncludeRecursive(model, includeTemplate)
});

这里是你的包括是会是在这种情况下:

{
    model: models.Categories,
    as: 'nestedCategories',
    include: [
        {
            model: models.Categories,
            as: 'nestedCategories'
        }
    ]
}
发布评论

评论列表(0)

  1. 暂无评论