CakePHP 2.1 - Wie richtig verwenden, unterscheidet sich in der find()
Ich habe eine Frage die mich verrückt und ich muss zugeben, ich bin nicht erlebt, dass in CakePHP. Wie bereits erwähnt, in dieser Frage,
Unter Verwendung von DISTINCT in einer CakePHP-finden-Funktion, unter Verwendung von DISTINCT auf diese Weise:
$this->Model->find('all', array('fields'=>'DISTINCT field_name'));
zurück keine EINDEUTIGEN Werte, sondern es werden alle Zeilen. In der Tat, die DISTINCT ist hier völlig sinnlos, weil, aus irgendeinem Grund , CakePHP fügt TableName
.id
in der SQL-Abfrage (warum?? kann ich entfernen Sie die id-Referenz??), effektiv die Rückgabe jedes EINDEUTIGE Primärschlüssel (=alle Zeilen=nicht hilfreich).
So, ich will noch die Rückkehr der unterschiedlichen Werte einer bestimmten Spalte Feldname. Kann ich es nicht einfach mit der find('all') oder find('list') - Funktion? Ist es wirklich der richtige Weg, es zu tun mit diesem Set::extract () - Funktion, beschrieben in dem link oben? Das scheint ein übermäßig indirekte Lösung von CakePHP, normalerweise Kuchen machen mein Leben leichter. 🙂 Was ist die richtige Art der Verwendung finden und UNTERSCHIEDLICHE zusammen? Vielleicht DISTINCT funktioniert nicht für die find()?
Blick auf das Kochbuch, Sie sagen: "Ein schnelles Beispiel für eine DISTINCT-Abfrage. Sie können auch andere Operatoren wie MIN(), MAX(), etc., in ähnlicher Weise:"
<?php
array(
'fields' => array('DISTINCT (User.name) AS my_column_name'),
'order' = >array('User.id DESC')
)
?>
Quelle: http://book.cakephp.org/2.0/en/models/retrieving-your-data.html
Dies zeigt, dass VERSCHIEDENE sollte auch möglich sein, aber was ist hier? Tut (Der Benutzer.name) entsprechen dem field_name ich will deutlich für oder ist my_column_name meine field_name?
Schließlich hat jede dieser verändert sich bei der Migration von CakePHP 1.x CakePHP 2.x? Das heißt, sind die Antworten für CakePHP 1.x gesehen auf Stackoverflow immer noch relevant?
Vielen Dank im Voraus!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, im zweiten Ausschnitt ist der richtige Weg, um eine
SELECT DISTINCT
in CakePHP 2.x.User.name
entspricht dem Feldnamen, in diesem Fall auf das Feldname
imusers
Tabelle.my_column_name
ist ein (optionaler) alias für den Namen des Feldes in der Ergebnismenge, d.h. statt dername
wird das Feld benanntmy_column_name
im ResultSet.$regions = $this->Provider->find('all', array ('fields' => array('DISTINCT (provider.region) AS region')));
oder$regions = $this->Provider->find('all', array ('fields' => array('DISTINCT (provider.region)')));
es nicht abholen eindeutige Einträge. Stattdessen werden alle Zeilen, die nicht UNTERSCHEIDBAR und nicht das, was ich wollte. Die resultierende SQL-Abfrage:SELECT DISTINCT (
Anbieter.
region),
Anbieter.
id` AUScarecrowd
.providers
ALSProvider
WHERE 1 = 1`. Habe ich missunderstand Sie und irgendwie ist mein code falsch?Provider.id
in der Abfrage. Die CakePHP-version verwenden Sie? Und welche Datenbank? Zumindest mit CakePHP 2.1.3 und MySQL die richtige Abfrage generiert wird.Provider.id
automatisch an die SQL-Abfrage, ist es angeblich so sein, oder ist es ein bug? Ich Frage, da das Modell Verein effektiv blockiert eine AUSGEPRÄGTE Suche-Abfrage für das entsprechende Modell. Oder vielleicht habe ich etwas verpasst?'recursive' => -1
im options array für das finden (oder verwenden Sie das Containable behavior).Den richtigen Weg, mit distinct mit Bedingung:
wobei $val enthält einige Werte, die Sie übergeben wollen, in der Abfrage.
Einen Schönen Tag
Für
CakePHP 3.X
Wählen Sie verschiedene Felder, die Sie verwenden können, die
distinct()
Methode:Kochbuch-Dokumentation