Code Duplication    Length = 41-41 lines in 2 locations

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

@@ 681-721 (lines=41) @@
678
     * @param object $document
679
     * @return Expr
680
     */
681
    public function includesReferenceTo($document)
682
    {
683
        $this->requiresCurrentField();
684
        $mapping = $this->getReferenceMapping();
685
        $reference = $this->dm->createReference($document, $mapping);
686
        $storeAs = array_key_exists('storeAs', $mapping) ? $mapping['storeAs'] : null;
687
        $keys = [];
688
689
        switch ($storeAs) {
690
            case ClassMetadata::REFERENCE_STORE_AS_ID:
691
                $this->query[$mapping['name']] = $reference;
692
                return $this;
693
                break;
694
695
            case ClassMetadata::REFERENCE_STORE_AS_REF:
696
                $keys = ['id' => true];
697
                break;
698
699
            case ClassMetadata::REFERENCE_STORE_AS_DB_REF:
700
            case ClassMetadata::REFERENCE_STORE_AS_DB_REF_WITH_DB:
701
                $keys = ['$ref' => true, '$id' => true, '$db' => true];
702
703
                if ($storeAs === ClassMetadata::REFERENCE_STORE_AS_DB_REF) {
704
                    unset($keys['$db']);
705
                }
706
707
                if (isset($mapping['targetDocument'])) {
708
                    unset($keys['$ref'], $keys['$db']);
709
                }
710
                break;
711
712
            default:
713
                throw new \InvalidArgumentException("Reference type {$storeAs} is invalid.");
714
        }
715
716
        foreach ($keys as $key => $value) {
717
            $this->query[$mapping['name']]['$elemMatch'][$key] = $reference[$key];
718
        }
719
720
        return $this;
721
    }
722
723
    /**
724
     * Set the $language option for $text criteria.
@@ 1079-1119 (lines=41) @@
1076
     * @param object $document
1077
     * @return Expr
1078
     */
1079
    public function references($document)
1080
    {
1081
        $this->requiresCurrentField();
1082
        $mapping = $this->getReferenceMapping();
1083
        $reference = $this->dm->createReference($document, $mapping);
1084
        $storeAs = array_key_exists('storeAs', $mapping) ? $mapping['storeAs'] : null;
1085
        $keys = [];
1086
1087
        switch ($storeAs) {
1088
            case ClassMetadata::REFERENCE_STORE_AS_ID:
1089
                $this->query[$mapping['name']] = $reference;
1090
                return $this;
1091
                break;
1092
1093
            case ClassMetadata::REFERENCE_STORE_AS_REF:
1094
                $keys = ['id' => true];
1095
                break;
1096
1097
            case ClassMetadata::REFERENCE_STORE_AS_DB_REF:
1098
            case ClassMetadata::REFERENCE_STORE_AS_DB_REF_WITH_DB:
1099
                $keys = ['$ref' => true, '$id' => true, '$db' => true];
1100
1101
                if ($storeAs === ClassMetadata::REFERENCE_STORE_AS_DB_REF) {
1102
                    unset($keys['$db']);
1103
                }
1104
1105
                if (isset($mapping['targetDocument'])) {
1106
                    unset($keys['$ref'], $keys['$db']);
1107
                }
1108
                break;
1109
1110
            default:
1111
                throw new \InvalidArgumentException("Reference type {$storeAs} is invalid.");
1112
        }
1113
1114
        foreach ($keys as $key => $value) {
1115
            $this->query[$mapping['name'] . '.' . $key] = $reference[$key];
1116
        }
1117
1118
        return $this;
1119
    }
1120
1121
    /**
1122
     * Rename the current field.