Skip to content

Commit a9bab0d

Browse files
committed
Set default mapping in metadata class
1 parent 851762f commit a9bab0d

File tree

4 files changed

+17
-15
lines changed

4 files changed

+17
-15
lines changed

lib/Doctrine/ODM/MongoDB/Mapping/ClassMetadata.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
use ReflectionEnum;
2929
use ReflectionNamedType;
3030
use ReflectionProperty;
31+
use stdClass;
3132

3233
use function array_filter;
3334
use function array_key_exists;
@@ -1228,6 +1229,11 @@ public function hasIndexes(): bool
12281229
*/
12291230
public function addSearchIndex(array $definition, ?string $name = null): void
12301231
{
1232+
// "mappings" is required and must be an object
1233+
if (! isset($definition['mappings']) || $definition['mappings'] === []) {
1234+
$definition['mappings'] = new stdClass();
1235+
}
1236+
12311237
$this->searchIndexes[] = [
12321238
'definition' => $definition,
12331239
'name' => $name ?? self::DEFAULT_SEARCH_INDEX_NAME,

lib/Doctrine/ODM/MongoDB/Mapping/Driver/AttributeDriver.php

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
use ReflectionClass;
2020
use ReflectionMethod;
2121
use ReflectionProperty;
22-
use stdClass;
2322

2423
use function array_merge;
2524
use function array_replace;
@@ -358,12 +357,11 @@ private function addIndex(ClassMetadata $class, AbstractIndex $index, array $key
358357
/** @param ClassMetadata<object> $class */
359358
private function addSearchIndex(ClassMetadata $class, SearchIndex $index): void
360359
{
361-
// "mappings" is required and must be an object
362-
$definition = ['mappings' => new stdClass()];
360+
$definition = [];
363361

364362
foreach (['dynamic', 'fields'] as $key) {
365363
if (isset($index->$key)) {
366-
$definition['mappings']->$key = $index->$key;
364+
$definition['mappings'][$key] = $index->$key;
367365
}
368366
}
369367

lib/Doctrine/ODM/MongoDB/Mapping/Driver/XmlDriver.php

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
use LibXMLError;
1414
use MongoDB\Driver\Exception\UnexpectedValueException;
1515
use SimpleXMLElement;
16-
use stdClass;
1716

1817
use function array_is_list;
1918
use function array_keys;
@@ -583,11 +582,10 @@ private function addIndex(ClassMetadata $class, SimpleXMLElement $xmlIndex): voi
583582
/** @param ClassMetadata<object> $class */
584583
private function addSearchIndex(ClassMetadata $class, SimpleXMLElement $searchIndex): void
585584
{
586-
// "mappings" is required and must be an object
587-
$definition = ['mappings' => new stdClass()];
585+
$definition = [];
588586

589587
if (isset($searchIndex['dynamic'])) {
590-
$definition['mappings']->dynamic = $this->convertXMLElementValue((string) $searchIndex['dynamic']);
588+
$definition['mappings']['dynamic'] = $this->convertXMLElementValue((string) $searchIndex['dynamic']);
591589
}
592590

593591
foreach ($searchIndex->field as $field) {
@@ -596,14 +594,14 @@ private function addSearchIndex(ClassMetadata $class, SimpleXMLElement $searchIn
596594

597595
// If the field is indexed with multiple data types, collect the definitions in a list.
598596
// See: https://www.mongodb.com/docs/atlas/atlas-search/define-field-mappings/#index-field-as-multiple-data-types
599-
if (isset($definition['mappings']->fields[$name])) {
600-
if (! array_is_list($definition['mappings']->fields[$name])) {
601-
$definition['mappings']->fields[$name] = [$definition['mappings']->fields[$name]];
597+
if (isset($definition['mappings']['fields'][$name])) {
598+
if (! array_is_list($definition['mappings']['fields'][$name])) {
599+
$definition['mappings']['fields'][$name] = [$definition['mappings']['fields'][$name]];
602600
}
603601

604-
$definition['mappings']->fields[$name][] = $fieldDefinition;
602+
$definition['mappings']['fields'][$name][] = $fieldDefinition;
605603
} else {
606-
$definition['mappings']->fields[$name] = $fieldDefinition;
604+
$definition['mappings']['fields'][$name] = $fieldDefinition;
607605
}
608606
}
609607

tests/Doctrine/ODM/MongoDB/Tests/Mapping/AbstractMappingDriverTestCase.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -433,7 +433,7 @@ public function testSearchIndexes(ClassMetadata $class): void
433433
[
434434
'name' => 'default',
435435
'definition' => [
436-
'mappings' => (object) ['dynamic' => true],
436+
'mappings' => ['dynamic' => true],
437437
'analyzer' => 'lucene.standard',
438438
'searchAnalyzer' => 'lucene.standard',
439439
'storedSource' => true,
@@ -446,7 +446,7 @@ public function testSearchIndexes(ClassMetadata $class): void
446446
[
447447
'name' => 'usernameAndPhoneNumbers',
448448
'definition' => [
449-
'mappings' => (object) [
449+
'mappings' => [
450450
'fields' => [
451451
'username' => [
452452
[

0 commit comments

Comments
 (0)