Domains anhand eines Produktes auslesen

Hallo,
möchte gerne programmatisch alle einem Produkt zugeordneten Domains auslesen. Habe das bisher über die Methode getSeoUrls() gemacht, aber das Product liefert als Ergebnis in diesem Fall null. Deswegen suche ich nach einer Alternative. Weiß jemand Rat?

$temp_file = tempnam(sys_get_temp_dir(), 'Error');
$productCriteria->addAssociation('visibilities');
$productCriteria->addAssociation('seoUrls.salesChannel.domains');
//context wird als Parameter übergeben
$salesChannelId = $context->getSalesChannelId(); //existiert
$varientProduct = $this->productRepository->search($productCriteria, $context)->first()->getSeoUrls(); // varientProduct->getSeoUrls() is null!
$varientProduct = $this->productRepository->search($productCriteria, $context)->first(); //Objekt existiert
ob_start();  
//productId wird der Methode als Parameter übergeben      
var_dump($productId);   //existiert       
var_dump( $salesChannelId);	//existiert						
var_dump($varientProduct->getSalesChannel());//geht so nicht, da getSeoUrls() null
var_dump($varientProduct->getDomains()); //geht so nicht, da getSeoUrls() null
if (file_put_contents(__DIR__ . '/errorPlugin.log',PHP_EOL . ob_get_contents(), FILE_APPEND) === false){              
     file_put_contents($temp_file, ob_get_contents(), FILE_APPEND);
}
ob_end_clean();           
$languageId='2fbb5fe2e29a4d70aa5854ce7ce3e20b';
//benötige eine Alternative zu $domains, da es so natürlich eine Exception wirft
$domains = $varientProduct->getSalesChannel()->getDomains();

Das Problem: Dadurch, dass(siehe Kommentare) im Code einiges null ist, stecke ich metertief im Morast

Zusatzfrage:
Über welches Query würde ich denn die einem Produkt zugehörigen Domains bekommen? Das Ergebnis könnte ich dann in ein Array packen und entsprechend weiter verarbeiten. Kenne die involvierten Tabellen nicht, ansonsten würde ich das Query selber formulieren.

Ich habe mich damit noch nie beschäftigt, aber kann es nicht sein, dass SeoUrl nur gesetzt ist, wenn diese manuell überschrieben wird und nicht über das Pattern gesetzt?

Vielleicht so?

SELECT scd.url
FROM product_visibility pv, sales_channel_domain scd 
WHERE scd.sales_channel_id = pv.sales_channel_id 
AND pv.product_id = 0x018e3d4e3d7971398d818d1193633268

Sofern das Produkt auch nur einer Domain zugeordnet wurde.

1 „Gefällt mir“

Soweit ich weiß wird die SeoUrl in der entsprechenden Tabelle seo_url abgelegt, das reine Pattern reicht (meines Wissens) nicht.

Vorab vielen Dank an R4M!
Okay! Habe vier Domainausgaben durch folgendes Query:

SELECT sales_channel_domain.url
FROM product_visibility
LEFT JOIN sales_channel_domain
ON  sales_channel_domain.sales_channel_id = product_visibility.sales_channel_id
AND product_visibility.product_id =  UNHEX(REPLACE('0000f344-5392-4c37-9a89-9e7c8085cd8a', '-', ''));

Wie komme ich jetzt an die seo_url ran? Habe zwar den Fremdschlüssel $salesChannelId, aber keinerlei Überbllick über die Datenbank! Ein ER Diagramm wäre hilfreich…

Brauchst Du nur die Domain oder die URL?

SELECT seo_path_info FROM seo_url WHERE language_id=0x... AND sales_channel_id=0x... AND foreign_key=0x...;

Wobei foreign_key die productId zugewiesen wird (language_id und sales_channel_id sollten ja selbsterklärend sein)

Dieses Thema wurde automatisch 30 Tage nach der letzten Antwort geschlossen. Es sind keine neuen Antworten mehr erlaubt.