[DBAL-102] SQLSRV PDO doesn't support DateTime as a PHP Object Created: 19/Mar/11 Updated: 15/Mar/13 Resolved: 14/Sep/11 |
|
| Status: | Resolved |
| Project: | Doctrine DBAL |
| Component/s: | Drivers |
| Affects Version/s: | 2.1 |
| Fix Version/s: | 2.1.3 |
| Type: | Bug | Priority: | Major |
| Reporter: | Aaron DM | Assignee: | Guilherme Blanco |
| Resolution: | Fixed | Votes: | 0 |
| Labels: | None | ||
| Environment: |
Windows 7, Microsoft SQL Server 2008, PHP SqlSrv Driver 2.0, PHP 5.3.6 |
||
| Description |
|
I have created an entity with has a datetime column Entity.php
/**
* @orm:Column(name="deleteAt", type="datetime")
*/
protected $deletedAt;
/**
* Get DeletedAt
* @return \DateTime
*/
public function getDeletedAt() {
return $this->deletedAt;
}
/**
* Set DeletedAt
* @param \DateTime $deletedAt
*/
public function setDeletedAt(\DateTime $deletedAt) {
$this->deletedAt = $deletedAt;
}
This should work, however I get this error when trying to set a "deleteAt" date $this->setDeletedAt(new \DateTime()); SQLSTATE[22007]: [Microsoft][SQL Server Native Client 10.0][SQL Server]Conversion failed when converting date and/or time from character string. This should work afaik. |
| Comments |
| Comment by Benjamin Eberlei [ 21/Mar/11 ] |
|
Are yo using columns of type "datetime" or "datetime2" in MSSQL? The former is not supported. |
| Comment by Aaron DM [ 21/Mar/11 ] |
|
I did not know datetime was not supported. I am using the column type "datetime" |
| Comment by Benjamin Eberlei [ 21/Mar/11 ] |
|
In this case you have to add your own datetime type and change the timestamp format, or use the VarDateTime instead by calling "overrideType". Have a look at the Doctrine\DBAL\Types folder, escpecially the Type.php, DateTimeType.php and VarDateTimeType.php |
| Comment by Aaron DM [ 29/Mar/11 ] |
|
I have now tried this with the column type "datetime2", which creates the following date format in the database And I am still getting the same error P.S. this time I tried doing a select |
| Comment by Benjamin Eberlei [ 29/Mar/11 ] |
|
Assigned to juokaz |
| Comment by Aaron DM [ 29/Mar/11 ] |
|
When i ran profile, this is what I see " AND (a0_.deleted_at <= @P3) ORDER BY a0_.deleted_at DESC','810678','Object','Object'" Expliclitly converting the DateTiem to a string works $query->setParameter("deletedAt", $deletedAt->format("Y-m-d H:i:s.u")); |
| Comment by Juozas Kaziukenas [ 29/Mar/11 ] |
|
Can you give a full code which you use to query this (or the smallest allowing to replicate). I can't see how DateTime object gets passed as a 'Object' to the query, this is handled by DBAL type system, not by mssql platform, which only specifies the date and/or time format. |
| Comment by Benjamin Eberlei [ 30/Mar/11 ] |
|
Does the error happen during a DQL or during flush (UPDATE/INSERT) ? |
| Comment by Aaron DM [ 30/Mar/11 ] |
|
https://gist.github.com/6b2a8b53ece6e75abf20 The code there works (its not fully complete, but I tested the statements with the same Entity and etc and I am unable to successfully query the database). Looks like it doesn't work even for a simple select. However if I do retrieve an entry, the getCreatedAt() does return a DateTime object correctly. |
| Comment by Guilherme Blanco [ 13/Sep/11 ] |
|
Is this issue still valid with new implementation of ParameterTypeInferer in ORM? It seems it solved this issue. |
| Comment by Guilherme Blanco [ 14/Sep/11 ] |
|
Closing since no response was given. |
| Comment by Michał Banaś [ 15/Mar/13 ] |
|
Why is it close ? After one day of waiting for response? |
| Comment by Marco Pivetta [ 15/Mar/13 ] |
|
Michał Banaś this actually works with the current implementation of the schema tools. Consider implementing additional formats a custom DBAL type instead. |