Skip to content

Commit

Permalink
Set default mapping in metadata class
Browse files Browse the repository at this point in the history
  • Loading branch information
GromNaN committed Oct 14, 2024
1 parent 851762f commit 66b0d20
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 14 deletions.
6 changes: 6 additions & 0 deletions lib/Doctrine/ODM/MongoDB/Mapping/ClassMetadata.php
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
use ReflectionEnum;
use ReflectionNamedType;
use ReflectionProperty;
use stdClass;

use function array_filter;
use function array_key_exists;
Expand Down Expand Up @@ -1228,6 +1229,11 @@ public function hasIndexes(): bool
*/
public function addSearchIndex(array $definition, ?string $name = null): void
{
// "mappings" is required and must be an object
if (! isset($definition['mappings']) || $definition['mappings'] === []) {
$definition['mappings'] = new stdClass();
}

$this->searchIndexes[] = [
'definition' => $definition,
'name' => $name ?? self::DEFAULT_SEARCH_INDEX_NAME,
Expand Down
6 changes: 2 additions & 4 deletions lib/Doctrine/ODM/MongoDB/Mapping/Driver/AttributeDriver.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@
use ReflectionClass;
use ReflectionMethod;
use ReflectionProperty;
use stdClass;

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

foreach (['dynamic', 'fields'] as $key) {
if (isset($index->$key)) {
$definition['mappings']->$key = $index->$key;
$definition['mappings'][$key] = $index->$key;
}
}

Expand Down
15 changes: 7 additions & 8 deletions lib/Doctrine/ODM/MongoDB/Mapping/Driver/XmlDriver.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
use LibXMLError;
use MongoDB\Driver\Exception\UnexpectedValueException;
use SimpleXMLElement;
use stdClass;

use function array_is_list;
use function array_keys;
Expand Down Expand Up @@ -584,10 +583,10 @@ private function addIndex(ClassMetadata $class, SimpleXMLElement $xmlIndex): voi
private function addSearchIndex(ClassMetadata $class, SimpleXMLElement $searchIndex): void
{
// "mappings" is required and must be an object
$definition = ['mappings' => new stdClass()];
$definition = [];

if (isset($searchIndex['dynamic'])) {
$definition['mappings']->dynamic = $this->convertXMLElementValue((string) $searchIndex['dynamic']);
$definition['mappings']['dynamic'] = $this->convertXMLElementValue((string) $searchIndex['dynamic']);
}

foreach ($searchIndex->field as $field) {
Expand All @@ -596,14 +595,14 @@ private function addSearchIndex(ClassMetadata $class, SimpleXMLElement $searchIn

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

$definition['mappings']->fields[$name][] = $fieldDefinition;
$definition['mappings']['fields'][$name][] = $fieldDefinition;
} else {
$definition['mappings']->fields[$name] = $fieldDefinition;
$definition['mappings']['fields'][$name] = $fieldDefinition;
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -433,7 +433,7 @@ public function testSearchIndexes(ClassMetadata $class): void
[
'name' => 'default',
'definition' => [
'mappings' => (object) ['dynamic' => true],
'mappings' => ['dynamic' => true],
'analyzer' => 'lucene.standard',
'searchAnalyzer' => 'lucene.standard',
'storedSource' => true,
Expand All @@ -446,7 +446,7 @@ public function testSearchIndexes(ClassMetadata $class): void
[
'name' => 'usernameAndPhoneNumbers',
'definition' => [
'mappings' => (object) [
'mappings' => [
'fields' => [
'username' => [
[
Expand Down

0 comments on commit 66b0d20

Please sign in to comment.