2016-07-14 7 views
2

Wenn ich Model::find() verwende, lautet die Antwort Resultset von Models, aber wenn ich columns Parameter hinzufüge, um zurückgegebene Spalten zu beschränken, lautet die Antwort Resultset of Rows.Phalcon find with columns Parameter gibt Zeilen anstelle von Modellen zurück

Beispiel:

// Resultset of Models 
$users = \Models\Users\Users::find(); 

// Resultset of Rows 
$users = \Models\Users\Users::find([ 
     'columns' => 'id, email' 
]); 

Das bin ich nicht in der Lage macht Modell Methoden aufrufen. Gibt es eine Möglichkeit, Resultsets von Models mit Spalten in :: find() -Methoden einzuschränken? Ich bin mir nicht sicher, aber dies scheint wie Fehler, da Phalcon docs sagt:

Während findfirst() direkt eine Instanz der genannten Klasse zurückgibt (wenn Daten zurückgegeben werden soll), die find() Methode gibt einen Phalcon \ Mvc \ Model \ Resultset \ Simple zurück.

Und es gibt nichts über die Ausnahme dieser Regel bei der Verwendung columns Parameter.

Ich würde auch bemerken, dass andere Parameter von :: find() wie condition, order, bind usw. gut funktioniert (Modelle zurückgegeben).

Phalcon 1.3.4

+2

Wenn bestimmte Spalten auswählen, werden Sie immer ein 'Resultset von Rows' bekommen, weil Phalcon nicht in der Lage ist um Ihre vollständige 'Users'-Modellstruktur zurückzugeben, deshalb wird sie nicht als 'Users'-Objekt" erkannt ". – Timothy

Antwort

3

Dies ist kein Fehler ist, ist es das erwartete Verhalten. Info in Scrollen Sie ein wenig runter zur Tabelle Parameter und lesen Sie die Beschreibung Spalten.

Wenn Sie Modellmethoden oder Beziehungen verwenden müssen, sollten Sie keine Spalten angeben. Wenn Sie jedoch eine bessere Leistung benötigen und keine Modellbeziehungen benötigen, sollten Sie die Query Builder verwenden.

Rest der find() Parameter wie Zustand, Bestellung e.t.c. wird Ihre Fähigkeit, Modellmethoden zu verwenden, nicht beeinflussen.

Die Methode findFirst() funktioniert auch wie die Methode find(). Beispiel hier:

keine Spalten angegeben:

News::findFirst(3); 

// Output 
Models\News Object 
(
... 

Bei der Angabe von Spalten

News::findFirst([ 
    'columns' => 'id, created_at' 
]); 

// Output 
Phalcon\Mvc\Model\Row Object 
(
    [id] => 1 
    [created_at] => 2016-02-02 
) 
+1

'findFirst()' im Grunde _ geht nach unten zu_ Aufruf 'getFirst() 'auf Ihrem' find() '-Objekt. 'find() -> getFirst()' – Timothy

+1

Genau und es ist Augenschmaus, auch können Sie die magischen Methoden wie 'findFirstByName ('Timothy');' :) –

+0

Wie oben beschrieben ist dies erwartet Verhalten und wird es nie sein geändert. Sie können weiterhin auf Eigenschaften zugreifen, da dies ein Objekt ist. Obwohl wir vielleicht einen magischen Getter/Setter hinzufügen könnten. – Juri