【发布时间】:2013-01-15 17:37:11
【问题描述】:
我有一个使用 CakePHP 2.2 和 MySQL 的应用程序。 我注意到返回值的类型转换是许多类型的字符串,例如 Float、Decimal、Int、Varchar、Text 等:
浮点数或小数:
var_dump($this->field('field_name'));
string(4) "1.00"
诠释
var_dump($this->field('field_name'));
string(1) "1"
对于布尔字段仅使用 TINYINT(1) 不会出现此问题:
Tinyint(1)
var_dump($this->field('field_name'));
bool(true)
通常对于货币字段,我将字段类型设置为 FLOAT 或 DECIMAL(11,2)... 也许我在 CakePHP 中使用这种类型是错误的? 这种行为非常乏味,尤其是对于十进制字段,因为当值为 0 时返回字符串“0.00”,这是真的。 所以我必须永远记住强制这样的类型:
if((float)$this->field('price')){
....
}
为什么 CakePHP 不返回正确类型转换的值?我该如何解决?谢谢!
【问题讨论】:
-
我认为这可能是 PHP 问题而不是 CakePHP 问题。这还取决于您如何提取数据。通常,如果您通过 GET/POST 或 Cookie 提取数据,PHP 会将字段分配为字符串,而不管它是什么。您将不得不强制类型转换。我不确定如何解决这个问题,我在编程中也遇到过这个问题。我总是决定强迫它
-
我的问题你明白我正在从数据库中读取数据,并且 CakePHP 仅对 tinyint(1) 字段应用正确的类型转换!
-
你是对的,这可能是 CakePHP 的一个缺点(一般来说,PHP 也是因为缺乏强类型)。转换变量现在可能是一种解决方法,或者您可以向 CakePHP 开发人员提出功能请求
标签: mysql model casting cakephp-2.1