2017-10-12 4 views
0

Algolia (name, slug, description, categories, supermarkets, image)가 색인을 생성해야하는 6 가지 속성을 가진 제품 엔티티가 있습니다.Symfony 2.8에서 업데이트 할 때 Algolia 관련 엔티티의 색인을 생성하지 않습니다.

나는 새로운 제품의 모든 것이 제대로 작동이 아래 그림과 같이되어야하는 색인을 만들 때 : 나는 슈퍼마켓과 카테고리 중 하나를 편집 특히 이동 한 경우

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

을 다음 저장, 그들이 절약 할 때 알골에 색인을 붙이지 않았습니다. 그러나 이름과 같은 다른 속성을 변경하면 범주 나 슈퍼마켓에 대한 변경 사항이 알골미 색인으로 업데이트됩니다.

이 내 제품 내에서 범주를 얻기를위한 나의 방법이다 : 사람이 나 제안에 대한 수정이있는 경우

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

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

    return $supermarkets; 
} 

가 감사 할 것인가, 나는 슈퍼마켓과 범주가 서로 온 있기 때문에 될 줄 알았는데 엔티티는 아직 인덱싱되지 않았지만 아직 수정 사항을 찾을 수 없습니다.

덕분에

+0

사진 대신 포스트 코드를 입력하십시오. – mega6382

답변

5

나는 당신이 인덱스 교리 이벤트 가입자에게 엔티티를 이용 것이다 algolia/algolia-search-bundle를 사용한다고 가정합니다.

엔터티 자체에 직접 저장된 엔터티 필드를 편집하면 doctrine 구독자가 호출되어 인덱스가 업데이트됩니다.

그러나 관련 엔터티를 업데이트하면 주 엔터티의 구독자가 호출되지 않습니다. 메인 엔터티의 가입자가 자신의 인덱스를 업데이트하도록해야합니다.

관련 엔티티에 대한 업데이트를 위해 doctrine 이벤트 구독자를 생성하고 카테고리 또는 슈퍼마켓이 업데이트 될 때마다 사용자 정의 이벤트를 트리거하는 것이 좋습니다. 사용자 지정 이벤트 처리기에서 관련 제품을 찾고 해당 필드를 업데이트합니다 (카운터 업데이트?). 이것은 트릭을 할 것입니다.

+0

나는 이것을 시도 할 것이다. 나는 이것이 당신이 말하는 것에 대한 것이라고 생각한다. https://symfony.com/doc/2.8/doctrine/event_listeners_subscribers.html#creating-the-subscriber-class – DBarkz

+0

필자는이 문서에이 내용을 설정하는 방법을 따라 왔지만 내가 무엇을해야하는지 완전히 알지 못했습니다. "// ... 제품으로 뭔가를하십시오"부분을 사용하여이 https://pastebin.com/PzJpNVks가 있지만 엔터티를 편집 할 때 트리거하는 방법을 모르겠습니다. – DBarkz

+0

'Category' 엔티티에서'postUpdate' 이벤트를 청취하는 doctrine 구독자를 만들 필요가 없습니다. 핸들러에서 사용자 정의 "category_updated"이벤트를 전달합니다. 다음 단계는 "category_updated"이벤트를 듣고 관련 'Product' 엔티티를 찾고 그것에 대한 일부 필드를 업데이트하는 사용자 정의 이벤트 리스너를 만드는 것입니다. 그러면 색인을 업데이트 할 '제품'개체에 대한 교리 이벤트가 호출됩니다. 슈퍼마켓도 마찬가지입니다. 이 솔루션은 Doctrine 이벤트와 Symfony 커널 이벤트를 모두 사용합니다. – dmnptr