Browse Source

fix: has-many unlink api - accept array of object with primary key column

Signed-off-by: Pranav C <pranavxc@gmail.com>
pull/7274/head
Pranav C 9 months ago
parent
commit
2f70779482
  1. 43
      packages/nocodb/src/db/BaseModelSqlv2.ts

43
packages/nocodb/src/db/BaseModelSqlv2.ts

@ -5136,7 +5136,14 @@ class BaseModelSqlv2 {
if (childRows.length !== childIds.length) {
const missingIds = childIds.filter(
(id) =>
!childRows.find((r) => r[parentColumn.column_name] === id),
!childRows.find(
(r) =>
r[parentColumn.column_name] ===
(typeof id === 'object'
? id[parentTable.primaryKey.title] ||
id[parentTable.primaryKey.column_name]
: id),
),
);
NcError.unprocessableEntity(
@ -5175,9 +5182,28 @@ class BaseModelSqlv2 {
{
// validate Ids
{
const childRowsQb = this.dbDriver(childTn)
.select(childTable.primaryKey.column_name)
.whereIn(childTable.primaryKey.column_name, childIds);
const childRowsQb = this.dbDriver(childTn).select(
childTable.primaryKey.column_name,
);
if (parentTable.primaryKeys.length > 1) {
childRowsQb.where((qb) => {
for (const childId of childIds) {
qb.orWhere(_wherePk(parentTable.primaryKeys, childId));
}
});
} else if (typeof childIds[0] === 'object') {
childRowsQb.whereIn(
parentTable.primaryKey.column_name,
childIds.map(
(c) =>
c[parentTable.primaryKey.title] ||
c[parentTable.primaryKey.column_name],
),
);
} else {
childRowsQb.whereIn(parentTable.primaryKey.column_name, childIds);
}
const childRows = await this.execAndParse(childRowsQb, null, {
raw: true,
@ -5186,7 +5212,14 @@ class BaseModelSqlv2 {
if (childRows.length !== childIds.length) {
const missingIds = childIds.filter(
(id) =>
!childRows.find((r) => r[parentColumn.column_name] === id),
!childRows.find(
(r) =>
r[parentColumn.column_name] ===
(typeof id === 'object'
? id[parentTable.primaryKey.title] ||
id[parentTable.primaryKey.column_name]
: id),
),
);
NcError.unprocessableEntity(

Loading…
Cancel
Save