From e0f10db1251d03079422d731f0fec6aeeee70992 Mon Sep 17 00:00:00 2001 From: chenos Date: Mon, 21 Dec 2020 14:15:58 +0800 Subject: [PATCH] fix: sub table field migrate after update associations --- .../src/hooks/fields-after-create.ts | 25 ++++++++++---- .../src/hooks/fields-after-update.ts | 15 ++++---- .../src/hooks/fields-before-validate.ts | 34 ------------------- packages/plugin-collections/src/server.ts | 11 ++++++ 4 files changed, 36 insertions(+), 49 deletions(-) diff --git a/packages/plugin-collections/src/hooks/fields-after-create.ts b/packages/plugin-collections/src/hooks/fields-after-create.ts index b035d03ee..877f9fdc5 100644 --- a/packages/plugin-collections/src/hooks/fields-after-create.ts +++ b/packages/plugin-collections/src/hooks/fields-after-create.ts @@ -2,14 +2,25 @@ import FieldModel from '../models/field'; export default async function (model: FieldModel, options: any = {}) { const { migrate = true } = options; + const Collection = model.database.getModel('collections'); + if (model.get('interface') === 'subTable') { + const target = model.get('target'); + if (target) { + await Collection.import({ + name: target, + internal: true, + developerMode: true, + }, options); + } + } if (migrate) { await model.migrate(options); } - if (model.get('collection_name') && model.get('parent_id')) { - const parent = await model.getParent({ - ...options, - }); - const Collection = model.database.getModel('collections'); - await Collection.load({...options, where: {name: parent.get('collection_name')}}); - } + // if (model.get('collection_name') && model.get('parent_id')) { + // const parent = await model.getParent({ + // ...options, + // }); + // const Collection = model.database.getModel('collections'); + // await Collection.load({...options, where: {name: parent.get('collection_name')}}); + // } } diff --git a/packages/plugin-collections/src/hooks/fields-after-update.ts b/packages/plugin-collections/src/hooks/fields-after-update.ts index e177ef205..5b1be9a0a 100644 --- a/packages/plugin-collections/src/hooks/fields-after-update.ts +++ b/packages/plugin-collections/src/hooks/fields-after-update.ts @@ -5,12 +5,11 @@ export default async function (model: FieldModel, options: any = {}) { if (migrate) { await model.migrate(options); } - if (model.get('collection_name') && model.get('parent_id')) { - const parent = await model.getParent({ - ...options, - }); - const Collection = model.database.getModel('collections'); - console.log('fields-after-update', parent.get('collection_name')); - await Collection.load({...options, where: {name: parent.get('collection_name')}}); - } + // if (model.get('collection_name') && model.get('parent_id')) { + // const parent = await model.getParent({ + // ...options, + // }); + // const Collection = model.database.getModel('collections'); + // await Collection.load({...options, where: {name: parent.get('collection_name')}}); + // } } diff --git a/packages/plugin-collections/src/hooks/fields-before-validate.ts b/packages/plugin-collections/src/hooks/fields-before-validate.ts index 4d74ba9a4..a12d099e0 100644 --- a/packages/plugin-collections/src/hooks/fields-before-validate.ts +++ b/packages/plugin-collections/src/hooks/fields-before-validate.ts @@ -4,26 +4,6 @@ import _ from 'lodash'; export default async function (model: FieldModel, options) { // 生成随机 name 要放最后 // model.generateNameIfNull(); - const Collection = model.database.getModel('collections'); - if (model.get('interface') === 'subTable') { - const target = model.get('target'); - if (target) { - const collection = await Collection.findOne({ - ...options, - where: { - name: target, - }, - }); - if (!collection) { - await Collection.create({ - name: target, - internal: true, - developerMode: true, - }, options); - } - await Collection.load({...options, where: {name: model.get('name')}}) - } - } // 如果 collection_name 不存在 if (!model.get('collection_name') && model.get('parent_id')) { const parent = await model.getParent({ @@ -31,20 +11,6 @@ export default async function (model: FieldModel, options) { }); const target = parent.get('target'); if (target) { - const collection = await Collection.findOne({ - ...options, - where: { - name: target, - }, - }); - if (!collection) { - await Collection.create({ - name: target, - internal: true, - developerMode: true, - }, options); - } - await Collection.load({...options, where: {name: parent.get('name')}}) model.set('collection_name', target); } } diff --git a/packages/plugin-collections/src/server.ts b/packages/plugin-collections/src/server.ts index ab66b4d54..041b564ea 100644 --- a/packages/plugin-collections/src/server.ts +++ b/packages/plugin-collections/src/server.ts @@ -14,6 +14,17 @@ export default async function (this: Application, options = {}) { directory: path.resolve(__dirname, 'collections'), }); + database.addHook('afterUpdateAssociations', async function(model, options) { + if (model instanceof models.FieldModel) { + if (model.get('interface') === 'subTable') { + const { migrate = true } = options; + const Collection = model.database.getModel('collections'); + await Collection.load({...options, where: {name: model.get('collection_name')}}); + migrate && await model.migrate(options); + } + } + }); + Object.keys(hooks).forEach(modelName => { const Model = database.getModel(modelName); Object.keys(hooks[modelName]).forEach(hookKey => {