Code Duplication    Length = 41-41 lines in 2 locations

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

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