2012-04-13 65 views
2

當我執行findfetch時,返回的值數組包含所有列的字符串表示形式,而不考慮列的數據類型。這意味着不是整數列返回,如:如何在CakePHP中檢索整數列的整數值?

array('field1' => 1) 

他們最終成爲

array('field1' => '1') 

是對CakePHP的這一預期的行爲嗎?我配錯了嗎?

我想過在我的模型的afterfind方法中編寫一些代碼,在適當的列上調用intval,但這真的是最好的解決方案嗎? CakePHP有更好的方式處理非字符串列嗎?

+0

爲什麼你必須使用整數值? – burzum 2012-04-13 00:33:17

+0

我輸出的數據爲JSON的Web應用程序,期望整數,而不是字符串。 – 2012-04-13 02:39:47

+0

那麼看到我的答案。 ;) – burzum 2012-04-13 09:32:47

回答

1

您可以根據模型屬性Model :: _架構找出模型中表中字段的字段類型。基於此,您可以在Model::afterFind()回調中鍵入您的字段的值。

您也可以手動檢查想要成爲整數的字段,但使用_schema可以讓它自動化。例如,您可以將其作爲行爲來完成,並將其附加到需要此功能的每個模型上。

因此,只需遍歷結果並檢查想要成爲整數的字段並輸入它們即可。

+0

是的,這似乎是最好的解決方案。我只是感到驚訝,CakePHP不會自動執行此操作。 – 2012-04-14 00:06:35

+0

因爲它只會增加99%不需要的額外開銷。我一直都沒有遇到這種情況,我必須輸入一些東西來輸出。順便說一句:我只是有一個更好的主意:類型轉換爲JavaScript中的JSON結果。這將把這項工作轉移到客戶CPU :) – burzum 2012-04-14 11:51:39

1

我也注意到了這一點,顯然這是PDO將所有東西都轉換爲字符串的結果。我提交了一個ticket,希望將來可能會有一個自動功能強制功能。

雖然客戶端可以轉換數據,但它不是很「乾淨」,特別是當您可能向第三方開發人員提供api時。

+0

是的,它的一張好票。它可能會被接受。 – mark 2012-06-15 11:09:39