fix: skip if targetKey or sourceKey exists
This commit is contained in:
parent
c406e5eb8b
commit
1828e15bb9
@ -1,4 +1,4 @@
|
|||||||
import Database, { Collection as DBCollection, StringFieldOptions } from '@nocobase/database';
|
import Database, { Collection as DBCollection } from '@nocobase/database';
|
||||||
import Application from '@nocobase/server';
|
import Application from '@nocobase/server';
|
||||||
import { createApp } from '..';
|
import { createApp } from '..';
|
||||||
|
|
||||||
@ -38,6 +38,7 @@ describe('hasMany field options', () => {
|
|||||||
target: 'foos',
|
target: 'foos',
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
await field.reload();
|
||||||
const json = field.toJSON();
|
const json = field.toJSON();
|
||||||
expect(json).toMatchObject({
|
expect(json).toMatchObject({
|
||||||
type: 'hasMany',
|
type: 'hasMany',
|
||||||
@ -62,6 +63,7 @@ describe('hasMany field options', () => {
|
|||||||
targetKey: 'ghi',
|
targetKey: 'ghi',
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
await field.reload();
|
||||||
expect(field.toJSON()).toMatchObject({
|
expect(field.toJSON()).toMatchObject({
|
||||||
name: 'foos',
|
name: 'foos',
|
||||||
type: 'hasMany',
|
type: 'hasMany',
|
||||||
|
@ -3,25 +3,35 @@ import { uid } from '@nocobase/utils';
|
|||||||
import { Model } from 'sequelize';
|
import { Model } from 'sequelize';
|
||||||
|
|
||||||
const setTargetKey = (db: Database, model: Model) => {
|
const setTargetKey = (db: Database, model: Model) => {
|
||||||
|
if (model.get('targetKey')) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
const target = model.get('target') as any;
|
const target = model.get('target') as any;
|
||||||
if (db.hasCollection(target)) {
|
if (db.hasCollection(target)) {
|
||||||
const targetModel = db.getCollection(target).model;
|
const targetModel = db.getCollection(target).model;
|
||||||
model.set('targetKey', targetModel.primaryKeyAttribute || 'id');
|
model.set('targetKey', targetModel.primaryKeyAttribute || 'id');
|
||||||
|
} else {
|
||||||
|
model.set('targetKey', 'id');
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const setSourceKey = (db: Database, model: Model) => {
|
const setSourceKey = (db: Database, model: Model) => {
|
||||||
|
if (model.get('sourceKey')) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
const source = model.get('collectionName') as any;
|
const source = model.get('collectionName') as any;
|
||||||
if (db.hasCollection(source)) {
|
if (db.hasCollection(source)) {
|
||||||
const sourceModel = db.getCollection(source).model;
|
const sourceModel = db.getCollection(source).model;
|
||||||
model.set('sourceKey', sourceModel.primaryKeyAttribute || 'id');
|
model.set('sourceKey', sourceModel.primaryKeyAttribute || 'id');
|
||||||
|
} else {
|
||||||
|
model.set('sourceKey', 'id');
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
export const beforeInitOptions = {
|
export const beforeInitOptions = {
|
||||||
belongsTo(model: Model, { database }) {
|
belongsTo(model: Model, { database }) {
|
||||||
const defaults = {
|
const defaults = {
|
||||||
targetKey: 'id',
|
// targetKey: 'id',
|
||||||
foreignKey: `f_${uid()}`,
|
foreignKey: `f_${uid()}`,
|
||||||
};
|
};
|
||||||
for (const key in defaults) {
|
for (const key in defaults) {
|
||||||
@ -34,8 +44,8 @@ export const beforeInitOptions = {
|
|||||||
},
|
},
|
||||||
belongsToMany(model: Model, { database }) {
|
belongsToMany(model: Model, { database }) {
|
||||||
const defaults = {
|
const defaults = {
|
||||||
targetKey: 'id',
|
// targetKey: 'id',
|
||||||
sourceKey: 'id',
|
// sourceKey: 'id',
|
||||||
through: `t_${uid()}`,
|
through: `t_${uid()}`,
|
||||||
foreignKey: `f_${uid()}`,
|
foreignKey: `f_${uid()}`,
|
||||||
otherKey: `f_${uid()}`,
|
otherKey: `f_${uid()}`,
|
||||||
@ -51,8 +61,8 @@ export const beforeInitOptions = {
|
|||||||
},
|
},
|
||||||
hasMany(model: Model, { database }) {
|
hasMany(model: Model, { database }) {
|
||||||
const defaults = {
|
const defaults = {
|
||||||
targetKey: 'id',
|
// targetKey: 'id',
|
||||||
sourceKey: 'id',
|
// sourceKey: 'id',
|
||||||
foreignKey: `f_${uid()}`,
|
foreignKey: `f_${uid()}`,
|
||||||
target: `t_${uid()}`,
|
target: `t_${uid()}`,
|
||||||
};
|
};
|
||||||
@ -67,7 +77,7 @@ export const beforeInitOptions = {
|
|||||||
},
|
},
|
||||||
hasOne(model: Model, { database }) {
|
hasOne(model: Model, { database }) {
|
||||||
const defaults = {
|
const defaults = {
|
||||||
sourceKey: 'id',
|
// sourceKey: 'id',
|
||||||
foreignKey: `f_${uid()}`,
|
foreignKey: `f_${uid()}`,
|
||||||
};
|
};
|
||||||
for (const key in defaults) {
|
for (const key in defaults) {
|
||||||
|
Loading…
Reference in New Issue
Block a user