2012-04-13 39 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