Lehre : wie Ersetzen-Funktion
Brauche ich Eure Hilfe, Baue meine Abfrage mit der Lehre. Ich bin eine symfony-Anfänger.
Zunächst baute ich meine Abfrage in MySQL-SQL-tab und es funktioniert Prima.
SELECT *
FROM contact
WHERE insee like '03%'
ORDER BY (LENGTH(tif) - LENGTH(REPLACE(tif,";",""))) DESC
To be more precise, my tif field looks like that :
1 - 01.02.01.02;01.02.03.04;01.05.06 (3 subsets)
2 - 01.02.03.08.07.01.02.03.08.0701.02.03.08.07; (1 subset)
3 - 01.02.01;02.06.05 (2 subsets)
Ich brauche, um die Anzahl der codes, die order by desc, um so die Reihenfolge 1,3,2.
Nun habe ich versucht, es zu bauen, in meiner repository-Klasse auf Symfony
Ich fand heraus, dass die replace-Funktion existiert nicht bei der Lehre, also versuchte ich Rock es tun, was folgt :
$qb = $this->getEntityManager()
->createQueryBuilder()
->select('c')
->from('SgaContactBundle:Contact', 'c')
->where('c.insee LIKE :insee')
->setParameter('insee', '%' . $insee . '%');
$qb->orderBy($qb->expr()->diff(
$qb->expr()->length('c.tif'),
$qb->expr()->length(preg_match_all('/;/i', 'c.tif')) ),
'DESC');
return $qb->getQuery()
->getResult();
Schließlich habe ich diese Fehlermeldung :
[Syntax Error] line 0, col 99: Error: Expected StateFieldPathExpression | string |
InputParameter | FunctionsReturningStrings | AggregateExpression, got '0'
Was kann ich tun, um Sie zu ersetzen "Ersetzen-Funktion" ?
Ich habe versucht, preg_replace, preg_match und schließlich preg_match_all aber etwas geht schief.
Danke für Eure Hilfe Jungs
- Ich verstehe nicht, warum
ORDER BY X DESC
mitX
eine ganze Zahl ist okay, daX
soll ein Feld ? Können Sie uns ein Beispiel geben von dem, wasc.tif
aussieht und was erwarten Sie von IhremORDER BY (...)
Ausdruck zu tun ? - Ich bearbeitet meine post. Es tut mir Leid ... Wie ich oben schrieb, meine tif-Feld sieht aus wie das : 1 - 01.02.01.02;01.02.03.04;01.05.06 (3 Teilmengen) 2 - 01.02.03.08.07.01.02.03.08.0701.02.03.08.07; (1 Teilsatz) 3 - 01.02.01;02.06.05 (2 Untergruppen)
- Okay ich habe es, danke! Sie könnte erwägen, eine zusätzliche Spalte mit der Anzahl der Teilmenge für jede
tif
Feld. So Sortieren Sie Ihr Ergebnis leichter ! Aber ich bin nicht sicher, dies ist eine gute übung... Lassen Sie mich überprüfen Sie die anderen Optionen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Lehre DQL hat keine ersetzen-Funktion. Aber Sie können schreiben Sie Ihre eigenen benutzerdefinierten Funktion. Sehen https://stackoverflow.com/a/21652988/2015279
Nur eine Warnung :
Vorsichtig sein, Jungs, wenn Sie erstellen Sie Ihre eigenen DQL-Funktion, müssen Sie eine Klasse erstellen mit den ersten Buchstaben groß-und die ändert sich aber nach app/config.yml.
Ich steckte es an die Produktion-Modus, während ich nicht ein problem auf der dev-Modus.
Wenn ich aber geändert :
durch
und alles funktioniert.
Änderungen auf der app/config.yml-Datei als auch.
Können Sie implementieren Ihre eigenen Funktionen haben wie die validate-Antwort, ODER Sie können verwenden Sie diese Lehre Extension-Paket, dass include ERSETZEN() die mysql-Funktion und vieles mehr (Spiel gegen, RUNDE, ASIN...) : https://github.com/beberlei/DoctrineExtensions
Einfach installieren Sie diese, um Ihr Projekt
Und fügen Sie die Funktion, die Sie möchten (nur) in deine config.yml Lehre conf :
Hier ist ein kleines Beispiel für ERSETZEN Sie im Abfrage-generator :
Hoffe, es kann jemand helfen, nachdem