我只是注意到,推进将数值转换为生成的setter方法中的字符串.
我的问题是,因为我使用德语语言环境,浮点值插入逗号而不是点.例如:“3.5”产生字符串“3,5”.
我正在使用Postgresql,显然期望3.5.
版本信息:
如果它是相关的,我使用:PHP 5.3.9,Propel 1.6与Symfony 2.2.
细节:
表定义如下所示:
<table name="account_entry">
...
<column name="amount" type="decimal" size="12" scale="2" required="true" />
...
</table>
public function setAmount($v)
{
if ($v !== null && is_numeric($v)) {
$v = (string) $v;
}
if ($this->amount !== $v) {
$this->amount = $v;
$this->modifiedColumns[] = AccountEntryPeer::AMOUNT;
}
return $this;
} // setAmount()
Invalid text representation: 7 ERROR: invalid input Syntax for type numeric: "3,5"
我花了一段时间才找到转换发生的地方.正如您所看到的,float值正在setAmount()中转换为字符串.到目前为止,我从未注意到将float值转换为string会导致包含特定于语言环境的小数分隔符的字符串.
我想知道为什么推动首先将浮点值转换为字符串?
这有什么解决方法吗?
我提出的唯一解决方法是非常丑陋和讨厌:
setlocale(LC_ALL, 'en_US');
$ae->setAmount(3.5);
setlocale(LC_ALL, 'de_DE');
解决方法:
问题是Propel将与该列相关的PHP字段转换为setter中的本机PHP类型(如@j0k提到的那样),但是如果你看得更深一点就会看到问题.在PropelTypes.php助手类中,在第76行,您可以看到“十进制”的本机PHP类型被列为“字符串”.
将其与“float”本机类型进行比较,该类型列为“double”.我不确定这是否是故意的,但无论如何,只需将列切换为type =“float”或type =“double”即可解决您的问题.
Propel应该将其转换为您的DBMS所需的任何类型.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。