我刚刚注意到,propel 在生成的 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>
生成的 setAmount() 方法如下所示:
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()
保存对象会导致 PostgreSQL 错误:
Invalid text representation: 7 ERROR: invalid input syntax for type numeric: "3,5"
我花了一段时间才找到发生这种转换的地方。如您所见,浮点值在 setAmount() 中被转换为字符串。到目前为止,我从未注意到将浮点值转换为字符串会导致字符串包含特定于语言环境的小数分隔符。
我想知道为什么推进首先将浮点值转换为字符串?有一些解决方法吗?
我想出的唯一解决方法是非常丑陋和烦人:
setlocale(LC_ALL, 'en_US');
$ae->setAmount(3.5);
setlocale(LC_ALL, 'de_DE');