Repository durchsuchen + REPLACE Funktion

Hallo.

Lässt sich folgendes Konstrukt auch auf das ProductRepository anwenden?

$this->connection->createQueryBuilder()
->select('*')
->from('product')
->where('REPLACE(REPLACE(REPLACE(REPLACE(feldname,\' \',\'\'),\'-\',\'\'),\'.\',\'\'),\'/\',\'_\') = wert')

Ich benötige die REPLACE Funktion um den Feldwert vor dem Vergleich zu „bereinigen/umzuwandeln“. Mit dem Query Build funktioniert es allerdings brauche ich die Entitäten als Result und kein Array. Repository wäre schöne und übersichtlicher. Leider weiß ich nicht wie und ob das überhaupt geht.
Danke für euer Feedback.

Gruß Mike

Hallo @_MikeB,

ich bin mir grad nicht sicher… Du willst den Symfony Query Builder ändern, damit das für Dein Projekt passt?

@_MikeB Moin, mal abgesehen davon, dass solche MultiReplaces eine Katastrophe sind … klar kannst Du das Repo verwenden und die Criteria entsprechend aufbereiten. Allerdings musst Du vorher den Feldnamen schon kennen. Daher würde ich empfehlen das ganze Replace aus der Abfrage zu entfernen und den Feldnamen vorher mit PHP aufzubereiten. Da reicht dann sicher auch eine RegExp.

Hi @moschadr

Ich weiß das es übel aussieht aber sehe aktuell keine andere Möglichkeit. Den Feldnamen in PHP aufzubereiten geht nicht da das die falsche Richtung ist. Beispiel:
Feldwert in der DB ist 123 45.6-7. In PHP habe ich aber nur den „bereinigten“ Wert 1234567. Mit diesem will ich alle Zeilen finden die den Wert in einer abgewandelten Form enthalten. Hoffe du weißt wie ich meine?! Deshalb benötige ich solch einen Replace Funktion im Querybuilder. Oder siehst du eine andere Möglichkeit das zu lösen?

Gruß Mike

@_MikeB Hi Mike, nur für mich, um Missverständnisse auszuschließen … in Deinem Beispiel führst Du das Replacing auf „feldname“ aus. Feldname ist der Spaltenname der Tabelle. Richtig? Und „wert“ aus Deinem Beispiel ist der Inhalt. Umgelegt auf Deinen letzten Post verstehe ich das so, dass Du in sämtlichen Spalten der Tabelle nach dem Wert „1234567“ suchen musst, in irgendeiner Spalte aber nur „123 45.6-7“ steht. Deine Suche soll sich aber auf alle Spalten und keine bestimmte Spalte beziehen. Richtig?

@moschadr mit etwas verspätung… Ja genau. Ich der DB kann 12-34.56 stehen. Wenn ich nach 123456 suche, will ich ich diesen Datensatz bekommen.