diff --git a/packages/core/client/src/modules/blocks/data-blocks/table/tableBlockSettings.tsx b/packages/core/client/src/modules/blocks/data-blocks/table/tableBlockSettings.tsx index a3f4bbecae..da441e8f62 100644 --- a/packages/core/client/src/modules/blocks/data-blocks/table/tableBlockSettings.tsx +++ b/packages/core/client/src/modules/blocks/data-blocks/table/tableBlockSettings.tsx @@ -202,7 +202,7 @@ export const tableBlockSettings = new SchemaSettings({ }, null); return { title: t('Table size'), - value: schema?.['x-component-props']?.size || 'middle', + value: schema?.['x-component-props']?.size || 'small', options: [ { label: t('Large'), value: 'large' }, { label: t('Middle'), value: 'middle' }, diff --git a/packages/core/client/src/schema-component/antd/association-field/SubTable.tsx b/packages/core/client/src/schema-component/antd/association-field/SubTable.tsx index 1c46e01689..03a82e2c4f 100644 --- a/packages/core/client/src/schema-component/antd/association-field/SubTable.tsx +++ b/packages/core/client/src/schema-component/antd/association-field/SubTable.tsx @@ -65,7 +65,7 @@ const subTableContainer = css` `; const tableClassName = css` - .ant-formily-item.ant-formily-item-feedback-layout-loose { + .ant-formily-item-feedback-layout-popover { margin-bottom: 0px !important; } .ant-formily-editable { @@ -202,7 +202,6 @@ export const SubTable: any = observer( { expect(profile1['userId']).toBe(user.id); }); + it('should update has many association with foreign key', async () => { + const User = db.collection({ + name: 'users', + fields: [ + { type: 'string', name: 'name' }, + { type: 'hasMany', name: 'profiles', foreignKey: 'userId', target: 'profiles' }, + ], + }); + + const Profile = db.collection({ + name: 'profiles', + fields: [ + { type: 'string', name: 'name' }, + { type: 'bigInt', name: 'userId' }, + { type: 'belongsTo', name: 'user', foreignKey: 'userId' }, + ], + }); + + await db.sync(); + + // create user + const user = await User.repository.create({ values: { name: 'user1' } }); + const profile = await Profile.repository.create({ values: { name: 'profile1' } }); + + const profileData = profile.toJSON(); + await User.repository.update({ + filterByTk: user.id, + values: { + profiles: [ + { + ...profileData, + userId: null, + }, + ], + }, + updateAssociationValues: ['profiles'], + }); + + const profile1 = await Profile.repository.findOne({ filterByTk: profile.id }); + expect(profile1['userId']).toBe(user.id); + }); + test('update belongs to with foreign key and object', async () => { const throughAB = db.collection({ name: 'throughAB', diff --git a/packages/core/database/src/update-associations.ts b/packages/core/database/src/update-associations.ts index 1c5f99f08b..212ac8f3c3 100644 --- a/packages/core/database/src/update-associations.ts +++ b/packages/core/database/src/update-associations.ts @@ -352,7 +352,11 @@ export async function updateSingleAssociation( if (updateAssociationValues.includes(key)) { const updateValues = { ...value }; - delete updateValues[association.foreignKey]; + + if (association.associationType === 'HasOne') { + delete updateValues[association.foreignKey]; + } + await instance.update(updateValues, { ...options, transaction }); } @@ -542,6 +546,10 @@ export async function updateMultipleAssociation( continue; } if (updateAssociationValues.includes(key)) { + if (association.associationType === 'HasMany') { + delete item[association.foreignKey]; + } + await instance.update(item, { ...options, transaction }); } await updateAssociations(instance, item, {