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