@@ 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. |