Ich mache eine App mit Symfony und ich erstelle die Datenbank und das Repository. Ich brauche eine Abfrage zu machen, die aus der Tabelle auswählt orders
, wo das Datum heute ist (das Feld date
ist datetime
) und wo entweder die user
Eigenschaft entspricht search
Variable oder die product
Eigenschaft übereinstimmt search
variabel. Bei der Übereinstimmung muss auch zwischen Groß- und Kleinschreibung unterschieden werden. Einfach ausgedrückt - der Benutzer wählt den Datumszeitraum (heute, alle Zeit oder letzten 7 Tage) und gibt eine Zeichenfolge ein, und ich muss alle Aufträge abrufen, die sich am angegebenen Datum (heute, alle Zeit oder letzten 7 Tage) befinden Die product
im Auftrag enthält die search
oder die user
Eigenschaft enthält die search
. Hier ist, was ich bisherSymfony3 queryBuilder wie mit OR zu suchen und nach Teilzeichenfolge zu suchen?
$queryBuilder->
where('DATE_DIFF(orders.date, CURRENT_DATE()) = 0')->
andWhere("order.user LIKE '%search%'")->
setParameter('search',$search);
Ich habe für beide user
und product
Eigenschaften übereinstimmen und ich brauche einen Teil der Zeichenfolge übereinstimmen, nicht die gesamte Zeichenfolge. Wenn der Benutzer beispielsweise nach mike
sucht, muss der Benutzer Mike Johnson
oder das Produkt mike
übereinstimmen.
Ich dachte über die Verwendung von orWhere
für beide, aber es wird nur das Datum übereinstimmen, auch wenn beide anderen Suchen falsch sind. Also habe ich andWhere
verwendet, aber wie soll ich jetzt das dritte Kriterium hinzufügen? Ich dachte über das Hinzufügen von OR in der addWhere
.
Ich habe viele Antworten hier gesehen, aber die meisten von ihnen sind wirklich alt. Einige sind vor 5 Jahren. Ich habe keine Ahnung, ob "DATE_DIFF" der richtige Weg ist oder ob der LIKE
auch der richtige Weg ist. In Symfony mit Doctrine könnte ich für eine einfache Abfrage mit SELECT
gehen und alles aufschreiben. Allerdings möchte ich die volle Kapazität des QueryBuilders nutzen und so wenig wie möglich Schlüsselworte wie LIKE
oder `OR '(Wortspiel beabsichtigt) verwenden.
Danke, ich dachte auch daran, aber gibt es eine Möglichkeit, die vom QueryBuilder bereitgestellte Funktion zu verwenden, die für mich nützlich sein könnte? –
Update Antwort mit einer neuen Lösung, aber ich denke, dass für Ihren Fall besser ist der erste @ ЛуциПетков –