Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Doctrine 2, decimal can only contain 14 digits

EDIT: This was just confirmed as a bug in Doctrine 2 http://www.doctrine-project.org/jira/browse/DDC-1112?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15724#action_15724


I have a Doctrine 2 entity and the value is mapped like this (with regular getter/setter):

/**
 * @Column(type="decimal", precision=40, scale=30)
 */
protected $someValue;

/**
 * @return decimal
 */
public function getSomeValue()
{
    return $this->someValue;
}

/**
 * @param decimal $someValue
 */
public function setSomeValue($someValue)
{
    $this->someValue = $someValue;
}

When I set that value from my code, the value gets written into the database correctly. But, and that is my problem, when I get the value (via getter or \Doctrine\Common\Util\Debug::dump()), it always gives me a number with maximum 14 digits, and it rounds the value. I read the record with the default findById().

eg: with value 1234567890.012345678901234567890123456789 I have 1234567890.0123
eg: with value 890.0123456789012345678901234567890123456 I have 890.01234567890

I of course want all digits, not just 14. The field in MySQL is declared like this:

someValue decimal(40,30) NOT NULL,

When I get the value with raw PHP and mysql_query(), it returns correctly.

Edit: seems like the problem is that Doctrine returns a float:

["someValue":protected]=> float(234567890.01235)

What's wrong, what should I check next, how to fix, any clues?

like image 519
tvlooy Avatar asked Nov 15 '22 00:11

tvlooy


1 Answers

It sounds like Doctrine2 is returning the float value and is running into floating point precision while mysql_query() is returning the value as a string. You can do a var_dump() on each returned variable and see the scalar type.

like image 55
Paul DelRe Avatar answered Dec 28 '22 14:12

Paul DelRe