I'm using Doctrine 2.2 with php 5.3 on an apache server.
So far I've stumbled upon the following problem: When I try to update a datetime column I get: SQLSTATE[22007]: [Microsoft][SQL Server Native Client 10.0][SQL Server]Conversion failed when converting date and/or time from character string.
I've even gone so far to make a get onto the column and then use that with only 1 day added to it to set the new date......same result.
When I instead change both the column in the database and in the entity from datetime to date, it functions as intended.
My main problem is, that there are a few fields where I will NEED to use a datetime column.
Here's my code:
(birthdate was the column I changed to date....and is one of the few columns where that is possible for me):
//This returns the datetime object that represents birthdate from the database
$help=$object->getBirthDate();
$help->setTimestamp(mktime($time[0],$time[1],$time[2],$date[2],$date[1],$date[0]));
$help->format(\DateTime::ISO8601);
$object->setBirthDate($help);
Does someone know a workaround here?
I ran into this problem with Doctrine 2.5 and SQL Server 2012. The problem is that the database field is type
DATETIME
, but doctirne only supportsDATETIME2
on SQLServer2008Platform and up.You should not be editing files in your vendor directory. The correct answer is to create a custom type: Doctrine Custom Mapping Types. In my case, I extended the current DateTimeType:
And then in the Symfony config.yml:
Its an official bug in Doctrine 2.2, to be resolved in 2.3.
Microseconds are being casted to string with wrong amount of zeros.
Workaround: Change function convertToDatabaseValue in File /Doctrine/DBAL/Types/DateTimeType.php:
I still had the same issue with Microsoft SQL Server Express 17 and Doctrine ORM v2.6.3/DBAL v2.9.2. (for Doctrine Platform, I use
SQLServer2012Platform
).All you need to do is to change your SQL fields from
DATETIME
toDATETIME2
type (wherever possible)What value are you passsing to the
datetime
field? You should pass aDatetime
instance