2011-01-15 10 views
0

In Cake php kann ich die Felder eines Modells mit der find() -Methode erfassen. Was ist, wenn ich eine Transformationsfunktion auf die Felder anwenden möchte? Gibt es eine Möglichkeit, diese Aufgabe direkt zu erledigen?CakePHP Autokonvertierung find() Felder?

Angenommen, ich habe ein Modell RaceTime mit den Feldern genannt racerId und timeMillis

RaceTime 
+------------+ 
| Field  | 
+------------+ 
| id   | 
| racerId | 
| timeMillis | 
+------------+ 

timeMillis ist ein int angibt, wie lange das Rennen in Millisekunden dauerte. Offensichtlich ist es für einen menschlichen Leser nicht sehr nützlich zu sagen, dass ein Rennen 15651 Millisekunden dauerte, und ich würde es gerne in ein für Menschen lesbares Format umwandeln.

Gibt es eine Möglichkeit, dies direkt in find() zu erreichen?

Oder ist die einzige Option, die Ergebnisse zu durchlaufen, nachdem find() beendet wurde?

+0

normalerweise tun Sie "ondemand" direkt in der Ansicht. Bevor Sie es ausgeben, konvertieren Sie es. Dies ist im Modell nicht erforderlich, wenn Sie es nicht für alle konvertierten Werte verwenden. – mark

Antwort

3

Was Sie wollen, ist mit Virtual Fields möglich.

Bearbeiten mit einem Beispiel:

var $virtualFields = array(
    'timeMillisHR' => 'FROM_UNIXTIME(Field.timeMillis)' 
); 
1

Vorausgesetzt, dass Sie nur wollen timeMillis in Sekunden konvertieren, können Sie 'Felder' = verwenden> array ('timeMillis/1000', 'other_fields'), wo ‚other_fields 'steht für die anderen Felder, die Sie als Teil Ihrer Abfrage abrufen möchten. Wenn es komplizierter ist als nur einfache mathematische Operationen und andere SQL-Funktionen, dann ist die Antwort Nr.

Wenn es eine ausreichend häufige Transformation in Ihrem Projekt ist, und Sie können keine geeignete Methode in der TimeHelper der finden NumberHelper, dann kannst du ganz einfach deinen eigenen Helfer schreiben.

Sie müssen so ziemlich jede Instanz durchlaufen, die Sie transformieren möchten.