LookUpTable - Suche & eigenes Model (s_search_index)

Hallo zusammen,

nach viel lesen und testen wende ich mich jetzt doch mal kurz an das Forum, vielleicht hat ja jemand einen Hinweis für mein Problem.

Es soll eine sog. LookUpTable geben.
Das ist einfach eine DB-Tabelle, in der Infos zu Artikeln hinterlegt sind, die bei der Suche berücksichtigt werden, genauer gesagt, weitere Artikel-Nummern unter denen der Artikel bekannt ist.
Also grob so (ManyToOne):
Artikel -> eigenes Attributfeld (customAttr1)
LookUpTable -> id, articleNumber (verknüpft mit customAttr1), supplierArticleNumber

Es kann also mehrere Einträge in der LookUpTable geben, die mit customAttr1 verknüpft sind und über deren Nummer der entsprechende Artikel gefunden werden soll.

Die LookUpTable habe ich als Model angelegt, die s_search_tables habe ich erweitert:
table (lookup_table), referenz_table (s_articles_attributes), foreign_key (customAttr1)

Leider wird in der s_search_index die Referenz nicht wirklich zur Artikel-Tabelle hergestellt.

Muß ich hier evtl. in den SearchIndexer eingreifen, damit die Verknüpfung korrekt hergestellt wird?

Viele Grüße und vielen Dank für jeden Hinweis

Andi

So, bin jetzt etwas weiter.

Das Problem ist in der ‘SearchIndexer.php’. In der Build-Action ist fogende Abfrage:

$table['elementID'] = empty($table['foreign_key']) && $table['table'] != 's_articles' ? 'articleID' : 'id';

Da in meiner LookupTable der foreign_key nicht id ist, müßte ich hier eingreifen, also so:

if($table['table'] == 'lookup_table')
{
     $table['elementID'] = 'article_number';
}

Das habe ich dann versucht mit:

$this->subscribeEvent(
     'Enlight_Bootstrap_InitResource_shopware_searchdbal.search_indexer',
     'overwriteIndexerService',
     500
);

public function overwriteIndexerService()
{
     return new ShopwarePlugins\LookupTable\SearchBundleDBAL\SearchTerm\SearchIndexerOverwrite();
}

Dazu habe ich den kompletten Code von der Original ‘SearchIndexer.php’ übernommen und geändert.
Allerdings bekomme ich eine Fehlermeldung: Call to a member function executeUpdate(), da $this->config, $this->connection und $this->termHelper leer sind.
Das Frontend wird mir auch überwiegend ‘zerschossen’.

Vielleicht hat ja jemand einen Hinweis, was hier falsch sein könnte. Diese Variante habe ich auch schon versucht:

public function overwriteIndexerService()
{
     $coreService = Shopware()->Container()->get('shopware_searchdbal.search_indexer');
     $overwriteService = new ShopwarePlugins\LookupTable\SearchBundleDBAL\SearchTerm\SearchIndexerOverwrite($coreService);
     Shopware()->Container()->set('shopware_searchdbal.search_indexer', $overwriteService);
}

 

Viele Grüße

Andi
 

Hallo,

jetzt bins nochmal ich.

Ich habe das Problem jetzt anders gelöst. Und zwar habe ich im Model der LookUpTable die Spalte für den PrimaryKey von id in uid umbenannt und die Spalte article_number in id. Dann findet das System die verknüpfte Tabelle. Die andere Lösung wäre mir zwar lieber gewesen, da ich die Tabelle so eigentlich nicht ‘sauber’ finde - aber jetzt erst mal egal.

Falls jemand eine Lösung oder Hinweise für das oben beschriebene Problem hat, würde es mich natürlich trotzdem interessieren - und vielleicht auch noch den einen oder anderen… :wink:

Viele Grüße

Andi