# Domains anhand eines Produktes auslesen

**URL:** <https://forum.shopware.com/t/domains-anhand-eines-produktes-auslesen/104000>\
**Category:** Programmierung\
**Tags:** programming\
**Created:** [10. Mai 2024 um 10:51 UTC](https://forum.shopware.com/t/domains-anhand-eines-produktes-auslesen/104000 "2024-05-10T10:51:46Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![thomas.kipp](https://avatars.discourse-cdn.com/v4/letter/t/b5e925/32.png) [@thomas.kipp](https://forum.shopware.com/u/thomas.kipp)\
**Post date:** [10. Mai 2024 um 10:51 UTC](https://forum.shopware.com/t/domains-anhand-eines-produktes-auslesen/104000/1 "2024-05-10T10:51:46Z")

</div>

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?

```auto
$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.

---

<div class="post-metadata">

**Author:** ![Max\_Shop](https://avatars.discourse-cdn.com/v4/letter/m/58f4c7/32.png) [@Max\_Shop](https://forum.shopware.com/u/Max_Shop)\
**Post date:** [10. Mai 2024 um 13:21 UTC](https://forum.shopware.com/t/domains-anhand-eines-produktes-auslesen/104000/2 "2024-05-10T13:21:35Z")

</div>

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?

---

<div class="post-metadata">

**Author:** ![R4M](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/r4m/32/9983_2.png) [@R4M](https://forum.shopware.com/u/R4M)\
**Post date:** [10. Mai 2024 um 13:55 UTC](https://forum.shopware.com/t/domains-anhand-eines-produktes-auslesen/104000/3 "2024-05-10T13:55:03Z")

</div>

> [@thomas.kipp](#):
>
> Über welches Query würde ich denn die einem Produkt zugehörigen Domains bekommen?

Vielleicht so?

```auto
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.

---

<div class="post-metadata">

**Author:** ![Anotherone](https://avatars.discourse-cdn.com/v4/letter/a/6de8d8/32.png) [@Anotherone](https://forum.shopware.com/u/Anotherone)\
**Post date:** [10. Mai 2024 um 14:34 UTC](https://forum.shopware.com/t/domains-anhand-eines-produktes-auslesen/104000/4 "2024-05-10T14:34:38Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![thomas.kipp](https://avatars.discourse-cdn.com/v4/letter/t/b5e925/32.png) [@thomas.kipp](https://forum.shopware.com/u/thomas.kipp)\
**Post date:** [10. Mai 2024 um 14:40 UTC](https://forum.shopware.com/t/domains-anhand-eines-produktes-auslesen/104000/5 "2024-05-10T14:40:11Z")

</div>

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

```auto
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…

---

<div class="post-metadata">

**Author:** ![Anotherone](https://avatars.discourse-cdn.com/v4/letter/a/6de8d8/32.png) [@Anotherone](https://forum.shopware.com/u/Anotherone)\
**Post date:** [10. Mai 2024 um 14:40 UTC](https://forum.shopware.com/t/domains-anhand-eines-produktes-auslesen/104000/6 "2024-05-10T14:40:25Z")

</div>

Brauchst Du nur die Domain oder die URL?

```auto
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)

---

<div class="post-metadata">

**Author:** ![system](https://europe1.discourse-cdn.com/flex013/uploads/shopware/original/3X/2/9/29c7587ba660f00e4995d1743162782e5d6d8653.svg) [@system](https://forum.shopware.com/u/system)\
**Post date:** [9. Juni 2024 um 14:41 UTC](https://forum.shopware.com/t/domains-anhand-eines-produktes-auslesen/104000/7 "2024-06-09T14:41:12Z")

</div>

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