Code Duplication    Length = 41-41 lines in 2 locations

lib/Doctrine/ODM/MongoDB/Query/Expr.php 2 locations

@@ 695-735 (lines=41) @@
692
     * @param object $document
693
     * @return Expr
694
     */
695
    public function includesReferenceTo($document)
696
    {
697
        $this->requiresCurrentField();
698
        $mapping = $this->getReferenceMapping();
699
        $reference = $this->dm->createReference($document, $mapping);
700
        $storeAs = array_key_exists('storeAs', $mapping) ? $mapping['storeAs'] : null;
701
        $keys = [];
702
703
        switch ($storeAs) {
704
            case ClassMetadata::REFERENCE_STORE_AS_ID:
705
                $this->query[$mapping['name']] = $reference;
706
                return $this;
707
                break;
708
709
            case ClassMetadata::REFERENCE_STORE_AS_REF:
710
                $keys = ['id' => true];
711
                break;
712
713
            case ClassMetadata::REFERENCE_STORE_AS_DB_REF:
714
            case ClassMetadata::REFERENCE_STORE_AS_DB_REF_WITH_DB:
715
                $keys = ['$ref' => true, '$id' => true, '$db' => true];
716
717
                if ($storeAs === ClassMetadata::REFERENCE_STORE_AS_DB_REF) {
718
                    unset($keys['$db']);
719
                }
720
721
                if (isset($mapping['targetDocument'])) {
722
                    unset($keys['$ref'], $keys['$db']);
723
                }
724
                break;
725
726
            default:
727
                throw new \InvalidArgumentException("Reference type {$storeAs} is invalid.");
728
        }
729
730
        foreach ($keys as $key => $value) {
731
            $this->query[$mapping['name']]['$elemMatch'][$key] = $reference[$key];
732
        }
733
734
        return $this;
735
    }
736
737
    /**
738
     * Set the $language option for $text criteria.
@@ 1093-1133 (lines=41) @@
1090
     * @param object $document
1091
     * @return Expr
1092
     */
1093
    public function references($document)
1094
    {
1095
        $this->requiresCurrentField();
1096
        $mapping = $this->getReferenceMapping();
1097
        $reference = $this->dm->createReference($document, $mapping);
1098
        $storeAs = array_key_exists('storeAs', $mapping) ? $mapping['storeAs'] : null;
1099
        $keys = [];
1100
1101
        switch ($storeAs) {
1102
            case ClassMetadata::REFERENCE_STORE_AS_ID:
1103
                $this->query[$mapping['name']] = $reference;
1104
                return $this;
1105
                break;
1106
1107
            case ClassMetadata::REFERENCE_STORE_AS_REF:
1108
                $keys = ['id' => true];
1109
                break;
1110
1111
            case ClassMetadata::REFERENCE_STORE_AS_DB_REF:
1112
            case ClassMetadata::REFERENCE_STORE_AS_DB_REF_WITH_DB:
1113
                $keys = ['$ref' => true, '$id' => true, '$db' => true];
1114
1115
                if ($storeAs === ClassMetadata::REFERENCE_STORE_AS_DB_REF) {
1116
                    unset($keys['$db']);
1117
                }
1118
1119
                if (isset($mapping['targetDocument'])) {
1120
                    unset($keys['$ref'], $keys['$db']);
1121
                }
1122
                break;
1123
1124
            default:
1125
                throw new \InvalidArgumentException("Reference type {$storeAs} is invalid.");
1126
        }
1127
1128
        foreach ($keys as $key => $value) {
1129
            $this->query[$mapping['name'] . '.' . $key] = $reference[$key];
1130
        }
1131
1132
        return $this;
1133
    }
1134
1135
    /**
1136
     * Rename the current field.