Индексирование ассоциации поисковых систем Symfony Algolia

У меня есть сущность продукта, и каждый продукт назначается категории, которая является отдельной сущностью категории, которая соединена со свойством categoryId в моей сущности продукта. Я проиндексировал все свойства, которые мне нужны, такие как цена имени и т. Д., Но я не могу правильно индексировать свой идентификатор категории:

введите здесь описание изображения введите здесь описание изображения

Когда это индексируется, я получаю массив, но не с фактическим идентификатором категории или другой информацией, связанной с этой категорией:

введите здесь описание изображения

Итак, мой вопрос: как правильно это сделать, чтобы категория, которой назначен мой продукт, была правильно проиндексирована?

Спасибо


person DBarkz    schedule 03.10.2017    source источник


Ответы (1)


У вас две проблемы:

Во-первых: вы указываете свойство и метод, вы должны выбрать один из них.

Второе: с symfony, когда вы создаете ManyToOne, как это

$this->categoryId

вернуть объект, вы не можете сопоставить весь объект с атрибутом algolia.

Я предлагаю вам просто сделать один метод следующим образом:

/*
 * @Algolia\Attribute
 */    
function getCategoryName() {
    return $this->categoryId->getName();
}
person Harold    schedule 04.10.2017
comment
На самом деле, теперь я посмотрел на это еще раз, это не совсем сработало, как предполагалось, метод работал в symfony, и когда я запускаю команду для индексации объекта в algolia, он говорит «успешно», но в индексе algolia нет имени категории. Вот метод, который я использовал: /* * @Algolia\Attribute(algoliaName=categoryName) */ public function getCategoryName() { return $this-›categoryId-›getName(); } Я предполагаю, что это как-то связано с тем фактом, что у меня нет свойства categoryName? Но я попытался сделать один, и он все еще не работал, так что здесь не совсем уверен. - person DBarkz; 04.10.2017
comment
Вы уверены, что у вашей категории есть название? :) Вы пытались переиндексировать с помощью --unsafe: php app/console algolia:reindex SomeBundle:EntityName --unsafe - person Harold; 04.10.2017
comment
Да, у моей категории defo есть имя и метод getName. Это сущность моего продукта: pastebin.com/9FBfF0qs и моя категория: pastebin.com/hx3HW3ND команда, которую вы сказали попробовать, просто сделала то же самое, что и без команды --unsafe, указанные объекты проиндексированы, но categoryName по-прежнему не в алголии. getCategoryName() находится прямо в нижней части моего объекта Product. - person DBarkz; 04.10.2017
comment
удалить attributeToIndex=... l.13 в сущности продукта - person Harold; 04.10.2017
comment
Хорошо, сделал это, все еще не повезло, хотя его все еще нет в индексе алголии :(. Также попытался очистить мой кеш, удалить индекс и создать его снова, но все тот же: S - person DBarkz; 04.10.2017
comment
Должна быть ошибка с любыми пользовательскими методами, которые я создаю, потому что я даже попробовал их пример с получением имени и цены здесь algolia.com/doc/api-client/symfony/ и это тоже не работает: S - person DBarkz; 04.10.2017
comment
Нет проблем, я использовал его много раз... Дайте мне файл вашего продукта еще раз - person Harold; 04.10.2017
comment
pastebin.com/R3HqGrdt На этот раз там есть еще несколько методов и свойств, я удалил их в прошлый раз, так что было не так много прокрутки, но я оставил все это на этот раз на случай, если что-то будет. - person DBarkz; 04.10.2017
comment
Странно то, что если я перемещаю содержимое этого метода (return $this->categoryId->getName();) в другой метод, такой как getName(), который является сопоставленным свойством, то категория индексируется идеально. Так что я предполагаю, что это пользовательские несопоставленные методы, которые не позволят мне индексировать, а не что-то не так с синтаксис. - person DBarkz; 04.10.2017
comment
Просто случайным образом удалось исправить это, удалив атрибут algolia из метода getCategoryName и создав поле с именем $categoryName с тем же прикрепленным к нему атрибутом algolia. Странно, что это не сработало бы только на методе. Но в любом случае спасибо за ваше время помочь с этим! - person DBarkz; 05.10.2017
comment
На самом деле выбросьте это, я только что обнаружил, что настоящая проблема была проблемой синтаксиса, лол, в аннотации: '/ * @Algolia\Attribute(algoliaName=categoryName) /' Мне не хватило второй звезды, это должно быть так' /* * @Algolia\Attribute(algoliaName=categoryName) */' Lol так расстраивает... - person DBarkz; 05.10.2017
comment
Ржунимагу! В следующий раз используйте настоящую идею, такую ​​как phpstorm! - person Harold; 05.10.2017