Im ersten Schritt löschen wir einen vorhandenen Eintrag im SOLR Index mit Hilfe des Tabellennamens und des Identifiers:
// Delete SOLR entry
$garbageCollector = GeneralUtility::makeInstance(GarbageHandler::class);
$garbageCollector->collectGarbage('tx_ext_domain_model_product', $product->getUid());
Nach dem Import können wir einen neuen Eintrag in der Indexqueue Tabelle der SOLR-Extension anlegen:
// Add to queue
$queryBuilder = DatabaseUtility::getQueryBuilderForTable('tx_solr_indexqueue_item');
$queryBuilder
->insert('tx_solr_indexqueue_item')
->values([
'root' => 1,
'item_type' => 'tx_ext_domain_model_product',
'item_uid' => $product->getUid(),
'indexing_configuration' => 'products',
'changed' => time(),
'errors' => '',
])
->execute();
Erklärung: root => PID der Site-Config, item_type: Tabellenname, item_uid: Identifier des Datensatzes, indexing_configuration: Name der Indexkonfiguration (siehe TypoScript)
Hinweis: Wenn ihr euch fragt, warum wir die Daten direkt in die Tabelle eintragen und keine fertige Funktion der SOLR-Exension nutzen: Es gibt in der Klasse \ApacheSolrForTypo3\Solr\Domain\Index\Queue\QueueItemRepository zwar die Funktion add(), hier gibt es aber den Hinweis, dass diese nur für interne Zwecke da ist und nicht von außen genutzt werden sollte.