From e2aa06f75532933af4838e58c757ff60ad08076f Mon Sep 17 00:00:00 2001 From: Yuri Kuznetsov Date: Fri, 26 Jul 2024 16:50:28 +0300 Subject: [PATCH] link multiple saver: skip not existing columns --- .../Relation/LinkMultipleSaver.php | 26 ++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/application/Espo/Core/FieldProcessing/Relation/LinkMultipleSaver.php b/application/Espo/Core/FieldProcessing/Relation/LinkMultipleSaver.php index 3e8623eda5..8fdec61c17 100644 --- a/application/Espo/Core/FieldProcessing/Relation/LinkMultipleSaver.php +++ b/application/Espo/Core/FieldProcessing/Relation/LinkMultipleSaver.php @@ -94,6 +94,16 @@ class LinkMultipleSaver $columns = $defs->getField($name)->getParam('columns'); } + if (is_array($columns)) { + $additionalColumns = $defs->getRelation($name)->getParam('additionalColumns') ?? []; + + foreach ($columns as $column => $field) { + if (!array_key_exists($column, $additionalColumns)) { + unset($columns[$column]); + } + } + } + $columnData = !empty($columns) ? $entity->get($columnsAttribute) : null; @@ -175,8 +185,14 @@ class LinkMultipleSaver foreach ($toCreateIdList as $id) { $data = null; - if (!empty($columns) && isset($columnData->$id)) { + if (is_array($columns) && isset($columnData->$id)) { $data = (array) $columnData->$id; + + foreach ($data as $column => $v) { + if (!array_key_exists($column, $columns)) { + unset($data[$column]); + } + } } $repository->getRelation($entity, $name)->relateById($id, $data, [ @@ -193,6 +209,14 @@ class LinkMultipleSaver foreach ($toUpdateIdList as $id) { $data = (array) $columnData->$id; + if (is_array($columns)) { + foreach ($data as $column => $v) { + if (!array_key_exists($column, $columns)) { + unset($data[$column]); + } + } + } + $repository->getRelation($entity, $name)->updateColumnsById($id, (array) $data); } }