From 9558943b3743951ee6cbfff36c7ff8cf3cdf37d0 Mon Sep 17 00:00:00 2001 From: mark_story Date: Fri, 17 Feb 2012 21:09:48 -0500 Subject: [PATCH] Fix duplicate items in HABTM associations. Apply patch from 'Kim Biesbjerg'. Fixes issues where nested HABTM associations would create duplicate content. Fixes #2564 Fixes #1598 Conflicts: cake/libs/model/datasources/dbo_source.php --- cake/libs/model/datasources/dbo_source.php | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/cake/libs/model/datasources/dbo_source.php b/cake/libs/model/datasources/dbo_source.php index 9c7e295e082..db5f5e980f9 100644 --- a/cake/libs/model/datasources/dbo_source.php +++ b/cake/libs/model/datasources/dbo_source.php @@ -1192,14 +1192,16 @@ function __mergeAssociation(&$data, $merge, $association, $type, $selfJoin = fal } } else { foreach ($merge as $i => $row) { - if (count($row) == 1) { - if (empty($data[$association]) || (isset($data[$association]) && !in_array($row[$association], $data[$association]))) { - $data[$association][] = $row[$association]; - } - } else if (!empty($row)) { - $tmp = array_merge($row[$association], $row); - unset($tmp[$association]); - $data[$association][] = $tmp; + $insert = array(); + if (count($row) === 1) { + $insert = $row[$association]; + } elseif (isset($row[$association])) { + $insert = array_merge($row[$association], $row); + unset($insert[$association]); + } + + if (empty($data[$association]) || (isset($data[$association]) && !in_array($insert, $data[$association], true))) { + $data[$association][] = $insert; } } }