2017-12-19 1 views
0

Mit einer Dokumentklasse mit PHPCR-ODM ist es möglich, fetch results with the class repository, die Ergebnisse werden automatisch von einem Feld sort_order sortiert, das nicht in der Document-Klasse, sondern im Datenbankschema ist.Sortieren der Ergebnisse nach sort_order mit Doctrine phpcr-odm

Beispiel für eine Abfrage in der Symfony Profiler protokolliert:

SELECT path FROM phpcr_nodes WHERE parent = ? AND workspace_name = ? ORDER BY sort_order ASC

Ich habe dies einfach Abfrage mit Querybuilder gebaut:

$qb->from() 
     ->document('AppBundle\Document\Product', 'product') 
     ->end() 
     ->where() 
     ->neq()->field('product.type')->literal('category'); 
$query = $qb->getQuery(); 

Das Ergebnis nicht durch das Feld sort_order wie andere sortiert Abfragen, und ich kann die orderBy Methode nicht verwenden, da dies kein Feld der Document-Klasse ist.

Also, wie kann ich meine Ergebnisse sortieren?

+0

noch verwirrend, noch einmal lesen „werden die Ergebnisse automatisch von einem Feld sortiert' sort_order', dass nicht in der Dokumentenklasse“dann später„Das Ergebnis wird nicht wie andere Abfragen nach dem Feld 'sort_order' sortiert. Soll die Abfrage nach der Spalte' sort_order' sortiert werden? Auf der anderen Seite weiß ich nicht, wie der Rest der Abfragen "automatisch" nach "sort_order" sortiert, weil AFAIK das nicht möglich ist, vielleicht irre ich mich. – ReynierPM

Antwort

0

Wer hat gesagt, dass Sie orderBy() nicht verwenden können? Sie sollten read the docs, denn sicherlich ist es möglich. Arbeiten mit dem gleichen Code und unter der Annahme die Sortierspalte als sort_order unten:

$qb->from() 
    ->document('AppBundle\Document\Product', 'product') 
    ->end() 
    ->where() 
    ->neq()->field('product.type')->literal('category') 
    ->orderBy()->desc()->field('product.sort_order'); 
+0

Ich kann 'orderBy()' verwenden, aber nicht mit diesem Feld, weil es ist nicht in meiner Document-Klasse. – loicb

+0

Wie erwarten Sie dann, nach etwas zu sortieren, das nicht in Ihrem Dokument enthalten ist? Das ergibt für mich keinen Sinn !!! Ist 'sort_order' von einem anderen Dokument kommt dann verwenden Sie einfach' JOIN' in Ihrem QB, um eine solche Spalte zu erreichen, wo immer es ist und wenden Sie das gleiche Konzept wie in meiner Antwort – ReynierPM

+0

Wenn Sie die 'find()' Methode für die DocumentRepository-Klasse verwenden Die Ergebnisse sind nach diesem Feld sortiert. Zum Beispiel: 'SELECT path FROM phpcr_nodes WHERE übergeordnete =? UND Arbeitsbereichsname =? ORDER BY sort_order ASC' – loicb

Verwandte Themen