# Manufacturer Repository durchsuchen über Name

**URL:** <https://forum.shopware.com/t/manufacturer-repository-durchsuchen-ueber-name/97806>\
**Category:** Programmierung\
**Tags:** programming\
**Created:** [30. Dezember 2022 um 15:36 UTC](https://forum.shopware.com/t/manufacturer-repository-durchsuchen-ueber-name/97806 "2022-12-30T15:36:28Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![AlexBS](https://avatars.discourse-cdn.com/v4/letter/a/ed655f/32.png) [@AlexBS](https://forum.shopware.com/u/AlexBS)\
**Post date:** [30. Dezember 2022 um 15:36 UTC](https://forum.shopware.com/t/manufacturer-repository-durchsuchen-ueber-name/97806/1 "2022-12-30T15:36:28Z")

</div>

Hallo,

ich schreibe gerade ein eigenes Manufacturer Plugin. Die Detailseite/Listing Seite soll über eine schönere Url abrufbar sein, zB /brand/{brandname} statt wie bei den meisten Plugins über einen query string mit der manufacturer ID,.

„brandname“ wird der manufacturer name in lowercase sein, also /brand/adidas. Wie durchsuche ich das manufacturer repository, wenn ich nur den kleingeschriebenen Namen des Herstellers habe und nicht die Id ?

Quasi so etwas wie:  
$criteria-\>addFilter(new EqualsFilter(strtolower('manufacturer\_name), $brandname);

LG Alex

---

<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:** [30. Dezember 2022 um 16:05 UTC](https://forum.shopware.com/t/manufacturer-repository-durchsuchen-ueber-name/97806/2 "2022-12-30T16:05:38Z")

</div>

Abgesehen davon, dass du mit dieser Methode mit Sonderzeichen so deine Probleme bekommen wirst, die URLS nicht in der Sitemap auftauchen und … das criteria sieht doch korrekt aus.

Mit Filtern kann man nach allem suchen, nicht nur nach ids. Daher ist dein strtolower-Ansatz nicht falsch.  
Ob es nun manufacturer\_name heißt oder dafür auch eine translation gibt, bzw. die überhaupt notwendig ist… ein Blick in die Datenbank sollte das recht schnell klären.

---

<div class="post-metadata">

**Author:** ![AlexBS](https://avatars.discourse-cdn.com/v4/letter/a/ed655f/32.png) [@AlexBS](https://forum.shopware.com/u/AlexBS)\
**Post date:** [30. Dezember 2022 um 19:24 UTC](https://forum.shopware.com/t/manufacturer-repository-durchsuchen-ueber-name/97806/3 "2022-12-30T19:24:35Z")

</div>

Danke für deine Antwort. Mein Filter war nur ins Blaue geraten. Ich habe ein paar Filterbeispiele gesehen mit ‚manufacturerId‘, kann mir aber nicht erklären, woher das genau kommt, da es keine Felde in der Datenbanktabellen gibt, das so heißen. Hast du da einen Tipp, wie ich am besten an die korrekte Bezeichnung komme?

Meinst du macht es grundsätzlich mehr Sinn das klassisch über die ID zu lösen statt über den Namen? Dachte mir, so ist die URL leserlicher.

Lg Alex

---

<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:** [31. Dezember 2022 um 14:49 UTC](https://forum.shopware.com/t/manufacturer-repository-durchsuchen-ueber-name/97806/4 "2022-12-31T14:49:59Z")

</div>

Wenn der Hersteller nicht automatisch geladen wird, dann müsstest du per $criteria-\>addAssociation(‚manufacturer‘) den Hersteller nachladen lassen. Hersteller wird wie nahezu jedes andere Entity auch eine translation haben.

Im Equals wird es dann vermutlich manufacturer.name oder manufacturer.translated.name lauten.

> <https://github.com/shopware/platform/blob/9d58d5a7651965bd365427d54e333830ed26980e/src/Core/Content/Product/ProductDefinition.php>

Nein, SEO-URLs sind immer sinnvoll. Nur bei URLs muss man auf Sonderzeichen etc. aufpassen. Ein Leerzeichen, ä, ö,ü,ß usw. in der URL macht sich bspw. nicht gut.

---

<div class="post-metadata">

**Author:** ![AlexBS](https://avatars.discourse-cdn.com/v4/letter/a/ed655f/32.png) [@AlexBS](https://forum.shopware.com/u/AlexBS)\
**Post date:** [1. Januar 2023 um 11:33 UTC](https://forum.shopware.com/t/manufacturer-repository-durchsuchen-ueber-name/97806/5 "2023-01-01T11:33:16Z")

</div>

product\_manufacturer.name war das korrekte Feld und so funktioniert es auch.

`$criteria->addFilter(new EqualsFilter(strtolower('product_manufacturer.name'), $name));`

---

<div class="post-metadata">

**Author:** ![AlexBS](https://avatars.discourse-cdn.com/v4/letter/a/ed655f/32.png) [@AlexBS](https://forum.shopware.com/u/AlexBS)\
**Post date:** [1. Januar 2023 um 19:13 UTC](https://forum.shopware.com/t/manufacturer-repository-durchsuchen-ueber-name/97806/6 "2023-01-01T19:13:56Z")

</div>

**EDIT:** Leider bekomme ich es nicht hin, das strtolower bzw. mein neues str\_replace(’ ', ‚-‘, …) mit in den Vergleich einzubeziehen. Ich bekomme über die Route dann so etwas wie /brand/firma-1-ag und in der DB steht dann Firma 1 AG.

Probiert habe ich  
`$criteria->addFilter(new EqualsFilter(strtolower(str_replace(' ', '-',' 'product_manufacturer.name')), $name));`

Eine Idee wie ich das korrekt einbaue?

---

<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:** [2. Januar 2023 um 13:37 UTC](https://forum.shopware.com/t/manufacturer-repository-durchsuchen-ueber-name/97806/7 "2023-01-02T13:37:51Z")

</div>

Das ist das Problem, was ich in meinem ersten Post angedeutet habe. Ich würde für alle Hersteller ein Slug erstellen lassen. Dann kannst du das Feld abfragen, Seo-Routen in der Sitemap erstellen usw.

---

<div class="post-metadata">

**Author:** ![AlexGalax](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/alexgalax/32/9925_2.png) [@AlexGalax](https://forum.shopware.com/u/AlexGalax)\
**Post date:** [2. Januar 2023 um 14:12 UTC](https://forum.shopware.com/t/manufacturer-repository-durchsuchen-ueber-name/97806/8 "2023-01-02T14:12:16Z")

</div>

Der beste weg ist, SEO Urls für den Controller erstellen zu lassen, und ID als Identifier in der Route zu lassen, so wie bei den Artikeln etc. auch.

```php

    /**
     * @Since("6.0.0.0")
     * @HttpCache()
     * @Route("/marke/{manufacturerId}", name="frontend.marke.page", options={"seo"="true"}, methods={"GET"})
     */
    public function index(?string $manufacturerId, SalesChannelContext $salesChannelContext, Request $request): Response
    {

```

Habe ich auch so gemacht für unsere Brand-Pages und funktioniert einwandfrei.

> **[Add custom SEO URLs](https://developer.shopware.com/docs/guides/plugins/plugins/content/seo/add-custom-seo-url)**

Die Doku ist irgendwie komplizierter als es eigentlich ist.

---

<div class="post-metadata">

**Author:** ![AlexBS](https://avatars.discourse-cdn.com/v4/letter/a/ed655f/32.png) [@AlexBS](https://forum.shopware.com/u/AlexBS)\
**Post date:** [4. Januar 2023 um 18:27 UTC](https://forum.shopware.com/t/manufacturer-repository-durchsuchen-ueber-name/97806/9 "2023-01-04T18:27:46Z")

</div>

So werde ichs auch machen, danke dir
