From 8e425889db365f6de5a01386039cd8ec16cea1ad Mon Sep 17 00:00:00 2001 From: Leandro Guindani Gehlen Date: Wed, 29 Jun 2022 15:14:17 -0300 Subject: [PATCH] Fixes extracting key values for `viaTable` relationships --- CHANGELOG.md | 5 +++++ composer.json | 5 +++++ src/LinkManyBehavior.php | 11 ++++++++++- 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d1581f3..75ffce7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,11 @@ Yii LinkMany Change Log ======================= +1.1.0 under development +----------------------- + +- Fixes extracting key values for `viaTable` relationships + 1.1.0 Jan 18, 2022 ------------------ diff --git a/composer.json b/composer.json index be9738b..4f899d2 100644 --- a/composer.json +++ b/composer.json @@ -48,5 +48,10 @@ "branch-alias": { "dev-master": "1.0.x-dev" } + }, + "config": { + "allow-plugins": { + "yiisoft/yii2-composer": true + } } } diff --git a/src/LinkManyBehavior.php b/src/LinkManyBehavior.php index 1900bc7..d056408 100644 --- a/src/LinkManyBehavior.php +++ b/src/LinkManyBehavior.php @@ -333,7 +333,16 @@ protected function fillRelation($model, $data, $formName) protected function extractPrimaryKey($data, $relation) { if ($relation->via) { - return $data; + if (is_scalar($data)) { + return $data; + } + + $result = []; + foreach ($relation->via->link as $key => $value) { + $result[] = $data[$value]; + } + + return count($result) === 1 ? $result[0] : $result; } else { $modelClass = $relation->modelClass; $primaryKey = $modelClass::primaryKey();