2016-06-21 20 views
0

Ich habe eine Tabelle mit FeldernCakePHP 3.0: Guss ausgewählte Felder in int

int id|text title|text content|int articleCommentCount| 

Wenn ich die json URL-Zugriff /articles.json ich so etwas wie

{ 
"announcements": [ 
    { 
    "id": 2, 
    "title":"title", 
    "articleCommentCount": 16 //Notice value is an int 
    } 
] 
} 

nun wegen der Struktur erhalten von meiner API möchte ich, dass ArtikelCommentCount Comment_count beschriftet wird (nur für Ausgabe von json Ausgabe). Also habe ich meine find() im Controller geändert und etwas wie angegeben; Wie vermeide ich dieses Problem, sich einen String anstelle eines int:

->select([ 
'comment_count'=>'articleCommentCount']) 

Wie Sie den Wert articleCommentCount wird sehen wie

{ 
"announcements": [ 
    { 
    "id": 2, 
    "title":"title", 
    "articleCommentCount": 16 
    "comment_count": "16" //Notice value was mirrored BUT is a JSON STRING 
    } 
] 
} 

Frage unter

COMMENT_COUNT gespiegelt

CakePHP Version 3.2

Antwort

2

Verwenden Sie die typeMap() Methode

->select(['comment_count'=>'articleCommentCount']) 
->typeMap(['comment_count' => 'integer']) 
+1

Es sollte beachtet werden, dass dies die vollständige typemap außer Kraft setzen würde, so dass die anderen Felder ihre Typzuordnungen verlieren. Auch die Typenkarte wird an anderen Stellen verwendet, nicht nur um ausgewählte Felder zu übertragen, weshalb man stattdessen 'selectTypeMap()' verwenden möchte. – ndm