2016-05-06 5 views
0

Ich habe eine Modell- und Modellsuche mit gii/crud erstellt, die meistens sehr gut funktioniert. Ich mag es, wie Sie die Datensätze sortieren oder filtern können, indem Sie Parameter in der URL angeben, ohne zusätzlichen Code schreiben zu müssen. Beispiel:Yii2 ModelSearch Bestellproblem

http://domain.com/api/user/index?sort=created_at

Doch was ich nicht finden können, wie die Datensätze in entweder in der URL einer auf- oder absteigender Reihenfolge bestellen. Ich kann keine Beispiele dafür finden.

Ich fühle mich wie ich eine andere Paramater (wie Reihenfolge) wie hinzufügen können soll:

http://domain.com/api/user/index?sort=created_at&order=DESC

Wer weiß, ob dies möglich ist?

+1

Ich habe durch den Yii-Quellcode geschaut und glaube, dass, um eine absteigende Reihenfolge zu haben, müssen Sie das Attribut mit einem Minus/Bindestrich voranstellen. Wie "? Sort = -created_at". Dies bricht jedoch das SQL woanders. Immer noch graben ... – Dubby

+0

http://www.yiiframework.com/doc-2.0/yii-data-sort.html wird Ihnen helfen – JKLM

+0

@Saurabh; Ja, ich habe das gelesen, aber diese Methode erfordert das manuelle Hinzufügen von Code. Ich versuche zu lernen, die Standard-Yii-Fähigkeiten dafür zu verwenden. – Dubby

Antwort

0

In Ihrer Suche Modell, wie unten absteigend

$query = Modelname::find()->orderBy('created_at DESC') 
0

OK, ich brauche den $ query Variable definieren, um meine eigene Frage zu beantworten. Ich weiß jetzt, dass es vielleicht hilfreicher war, wenn ich ausführlicher beschrieb, was ich tat.

Ich baue eine RESTful-API und hatte die Nachrichtenindexmethode überschrieben, sodass ich ActiveDataProvider verwenden kann, um mehr Kontrolle über die Abfrage zu haben. Dadurch wurde die Standardsortiermethode (nur absteigend) durchbrochen.

Standardmäßig ermöglicht die RESTful-API das Hinzufügen von ?sort=created_at für aufsteigende und ?sort=-created_at für absteigende Reihenfolge. Die Konstruktion des SQL beim Überschreiben der eingebauten Aktion verhindert jedoch, dass dies ordnungsgemäß funktioniert.

Edit: Ich habe gerade festgestellt, dass ich es gebrochen habe, indem ich versucht habe, meine eigene Sortiermethode einzuschließen, die mit dem Standard kollidierte. Sobald ich meine Sortierung entfernt habe, funktioniert es wie erwartet.