FosElasticaBundle: определить сопоставление для полей GUID/UUID

Как определить сопоставления в config_yml, если мои объекты используют тип поля GUID в качестве идентификатора?

Подробности

У меня есть проект с Symfony 2.7.3 и FosElasticaBundle 3.1.4.

Я настроил сопоставление, и все работает нормально, когда я использую команду заполнить или редактирую существующий объект; но при создании нового объекта я получаю исключение

"expected a simple value for field [_id] but found [START_OBJECT]]"

Проверка ответа JSON Я заметил, что Для _id задан пустой объект ..."_id":{}....

В классе Uuid уже есть метод __toString, который, как я ожидаю, должен помочь, но я, вероятно, что-то упускаю.

Текущие сопоставления

fos_elastica:
    clients:
        default: { host: %elasticsearch_host%, port: %elasticsearch_port%, logger: true }
    indexes:
        app:
            types:
                user:
                    mappings:
                        name: ~
                        surname: ~
                    persistence:
                        driver: orm
                        model: AppBundle\Entity\User
                        provider: ~
                        listener: ~
                        finder: ~

Спасибо.


person Francesco Abeni    schedule 19.08.2015    source источник


Ответы (1)


Для полей UUID/GUID нет конкретных сопоставлений.

Идентификатор извлекается с использованием стандартного средства доступа к свойствам Symfony, поэтому решение моей проблемы состояло в том, чтобы изменить метод getId() в моей сущности и сделать его преобразованием в строку.

public function getId()
{
    return (string)$this->id;
}
person Francesco Abeni    schedule 03.09.2015
comment
P.S. Я предложил PR для FosElasticaBundle, чтобы идентификатор всегда приводился к строке при преобразовании объекта в документ ElasticSearch, но пока он не будет объединен, единственное решение находится в этом ответе. - person Francesco Abeni; 03.09.2015