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