Code Duplication    Length = 42-43 lines in 2 locations

src/Queries/BaseQuery.php 1 location

@@ 347-388 (lines=42) @@
344
     *
345
     * @return void
346
     */
347
    protected function addItemToResultsUsingKeyBy(&$results, BitrixModel $object)
348
    {
349
        $item = $object->fields;
350
        if (!isset($item[$this->keyBy])) {
351
            throw new LogicException("Field {$this->keyBy} is not found in object");
352
        }
353
354
        $keyByValue = $item[$this->keyBy];
355
356
        if (!isset($results[$keyByValue])) {
357
            $results[$keyByValue] = $object;
358
        } else {
359
            $oldFields = $results[$keyByValue]->fields;
360
            foreach ($oldFields as $field => $oldValue) {
361
                // пропускаем служебные поля.
362
                if (in_array($field, ['_were_multiplied', 'PROPERTIES'])) {
363
                    continue;
364
                }
365
366
                $alreadyMultiplied = !empty($oldFields['_were_multiplied'][$field]);
367
368
                // мультиплицируем только несовпадающие значения полей
369
                $newValue = $item[$field];
370
                if ($oldValue !== $newValue) {
371
                    // если еще не мультиплицировали поле, то его надо превратить в массив.
372
                    if (!$alreadyMultiplied) {
373
                        $oldFields[$field] = [
374
                            $oldFields[$field]
375
                        ];
376
                        $oldFields['_were_multiplied'][$field] = true;
377
                    }
378
379
                    // добавляем новое значению поле если такого еще нет.
380
                    if (empty($oldFields[$field]) || (is_array($oldFields[$field]) && !in_array($newValue, $oldFields[$field]))) {
381
                        $oldFields[$field][] = $newValue;
382
                    }
383
                }
384
            }
385
386
            $results[$keyByValue]->fields = $oldFields;
387
        }
388
    }
389
390
    /**
391
     * Determine if all fields must be selected.

src/Queries/HLQuery.php 1 location

@@ 121-163 (lines=43) @@
118
        return new Collection($items);
119
    }
120
121
    protected function addItemToResultsUsingKeyBy(&$results, HLModel $object)
122
    {
123
        $item = $object->fields;
124
125
        if (!isset($item[$this->keyBy])) {
126
            throw new LogicException("Field {$this->keyBy} is not found in object");
127
        }
128
129
        $keyByValue = $item[$this->keyBy];
130
131
        if (!isset($results[$keyByValue])) {
132
            $results[$keyByValue] = $object;
133
        } else {
134
            $oldFields = $results[$keyByValue]->fields;
135
            foreach ($oldFields as $field => $oldValue) {
136
                // пропускаем служебные поля.
137
                if (in_array($field, ['_were_multiplied', 'PROPERTIES'])) {
138
                    continue;
139
                }
140
141
                $alreadyMultiplied = !empty($oldFields['_were_multiplied'][$field]);
142
143
                // мультиплицируем только несовпадающие значения полей
144
                $newValue = $item[$field];
145
                if ($oldValue !== $newValue) {
146
                    // если еще не мультиплицировали поле, то его надо превратить в массив.
147
                    if (!$alreadyMultiplied) {
148
                        $oldFields[$field] = [
149
                            $oldFields[$field]
150
                        ];
151
                        $oldFields['_were_multiplied'][$field] = true;
152
                    }
153
154
                    // добавляем новое значению поле если такого еще нет.
155
                    if (empty($oldFields[$field]) || (is_array($oldFields[$field]) && !in_array($newValue, $oldFields[$field]))) {
156
                        $oldFields[$field][] = $newValue;
157
                    }
158
                }
159
            }
160
161
            $results[$keyByValue]->fields = $oldFields;
162
        }
163
    }
164
165
    /**
166
     * Get count of elements that match $filter.