在Symfony 2.8中更新时,Algolia没有索引相关实体

DBa*_*rkz 0 php methods search symfony algolia

我有一个产品实体,有6个属性,应该由Algolia索引(名称,slug,描述,类别,超市,图像).

当我创建一个新产品时,一切都正常工作,并将其编入索引,如下所示:

{
  "name": "White Bread",
  "slug": "white-bread",
  "description": "This is a description",
  "image": "logo.png",
  "supermarkets": [
    "Unassigned",
    "Unassigned"
  ],
  "categories": [
    "Bread",
    "Unassigned"
  ],
  "objectID": "eyJpZCI6MX0="
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我去专门编辑超市和类别然后保存它们,那么在保存时它们不会被归入algolia.但是,如果我更改任何其他属性(如名称),则我对类别或超市所做的更改将更新为algolia索引.

这是我从我的产品中获取类别的方法:

/**
 * @Algolia\Attribute(algoliaName="supermarkets")
 */
public function getSupermarkets()
{
    $supermarkets = array();

    foreach($this->instances as $instance){
        $supermarkets[] = $instance->getSupermarketName();
    }

    return $supermarkets;
}
Run Code Online (Sandbox Code Playgroud)

如果有人对此或任何建议有解决方案,我将不胜感激,我认为这可能是因为超市和类别来自另一个未编入索引但尚未设法找到修复的实体.

谢谢

dmn*_*ptr 5

我假设您正在使用algolia/algolia-search-bundle哪个会利用Doctrine事件订阅者为您的实体编制索引.

编辑直接存储在实体本身上的实体字段时,将调用doctrine订阅者,这会导致索引更新.

但是,更新相关实体时,不会调用主实体上的订户.您需要使主实体上的订户执行其操作,这将更新您的索引.

我建议为相关实体的更新创建doctrine事件订阅者,并在更新类别或超市时触发自定义事件.在自定义事件处理程序中,您可以找到相关产品并更新其中的一些字段(更新计数器?).这样就可以了.