Frage

Ich habe eine Liste der bestellten Elemente, die gemäß dem Int -Feld bestellt wurden order. Ich erstelle eine Galerie in CakePHP 1.2, die einen Vorgänger und einen nächsten Schaltfläche hat, und diese sollten nach ihrer Bestellung mit dem vorherigen und nächsten Artikel verlinken, nicht gemäß ihren id.

Um dieses Ergebnis zu erhalten, habe ich den Parameter "Order" in die Find -Funktion aufgenommen und es mit bevölkern 'Item.order'=>'DESC'. Trotzdem ist das Ergebnis ein id Bestellliste.

Meine Frage ist: Was mache ich falsch? Mein Controller:

$this->Item->id = 16;

$neighbours = $this->Item->find('neighbors', array(
    'order' => array('Item.order'=>'DESC'),
    'fields' => array('id','name')
));

Meine Lösung

Ich habe einen anderen Ansatz ausprobiert. Mein Code erledigt jetzt den Job und sieht wie folgt aus:

$order = $this->Item->findById(6);

$neighbours = $this->Item->find('neighbors', array(
    'field' => 'order',
    'value' => $order['Item']['order']
));

Durch Einstellen des Parameters 'field' auf das Feld wird das Bestellfeld sein und die festlegen 'value' Parameter für den Bestellwert Ihres aktuellen Elements Sie erhalten die prev und next.

War es hilfreich?

Lösung

Ja, das Problem war, dass Sie das Feld "Auftrag" nicht in Ihr Fields -Array einbezogen haben.

$neighbours = $this->Item->find('neighbors', array(
    'order' => 'order DESC',
    'fields' => array('id', 'name', 'order')
));

Es sei denn, Sie haben verwandte Modelle mit widersprüchlichen Feldnamen, die Sie nicht einbeziehen müssen Item. Modellprefix (obwohl ich normalerweise trotzdem tue, um solche Fehler zu vermeiden.) Ihre ursprüngliche Syntax würde funktionieren, wenn Sie eingeschlossen hätten [Item.]order In Feldern"

Schließlich ist Ihre Lösung nicht optimal, Sie machen zwei SQL -Abfragen, wenn Sie es nicht benötigen. Und für mich ist 'Field' keine Abfrageoption ist, was bedeutet, dass Sie alle Felder in der Tabelle zurückgeben.

Andere Tipps

Ich hatte Probleme damit. Grundsätzlich habe ich eine Liste von Fragen, die zufällig (nur einmal) pro Benutzersitzung bestellt werden müssen.

Ich habe die Reihenfolge des Modells auf so etwas festgelegt:

'FIELD(TestQuestion.id, 3, 1, 5)';

Dies funktionierte für normale Abfragen gut, aber die Suche nach Nachbarn wird durch Zeile 2897 in Modell.Php beeinträchtigt:

$query['order'] = $field . ' DESC';

Um es umzugehen, habe ich Folgendes gemacht:

  • Fügen Sie ein virtuelles Feld namens "pause_order" hinzu und legen Sie die Reihenfolge darauf ein:

    $this->TestQuestion->virtualFields['examination_order'] = 'FIELD(TestQuestion.id, 3, 1, 5)';
    
    $this->TestQuestion->order = array(
        $this->TestQuestion->alias . '.examination_order'
    );
    
  • Stellen Sie im Ruf von Find Nachbarn das Feld 'Feld' auf 'pscensination_order' fest, wobei der Wert auf den in den Index festgelegten Wert festgelegt ist, wie zuvor gefunden:

    $neighbors = $this->TestQuestion->find(
        'neighbors',
        array(
            'field' => 'examination_order',
            'value' => $testQuestion[$this->TestQuestion->alias]['examination_order'],
            'conditions' => $conditions
        )
    );
    
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top