我正在尝试将项目从mssql移植到mysql,使用MySQL Workbench移植数据库 - 一切顺利。当我尝试插入数据时,我得到了SQLSTATE [22007]:无效的日期时间格式:1292日期时间值不正确:' 06/18/2015 14:49:22'对于列' x'。在doctrine配置Entityname.orm.yml中我有:
x:
type: datetime
gedmo:
timestampable:
on: create
在实体类中:
/**
* @var datetime $x
*/
private $x;
/**
* Set x
*
* @param datetime $x
*/
public function setX($x)
{
$this->x= $x;
}
导致错误的代码:
$em = $this->container->get('doctrine')->getEntityManager();
$new_entity = new EntityName();
$new_entity->setX(new \DateTime());
$em->persist($new_entity );
$em->flush();
在_profiler中我发现: INSERT INTO entity_name(x)VALUES(?)({" 1":{" date":" 2015-06-18 14:49:22",& #34; timezone_type":3,"时区":"欧/布加勒斯特"}})
之后的错误。
这在使用pdo_sqlsrv database_driver和mssql数据库之前有效。
编辑:什么工作 - 运行set sql_mode = NO_ENGINE_SUBSTITUTION; set global sql_mode = NO_ENGINE_SUBSTITUTION;在mysql数据库中 - 似乎symfony没有完成错误的日期时间格式化。该错误是由strict_trans_tables引起的 - SQL模式改变了MySQL执行SQL语句的方式
答案 0 :(得分:0)
我认为你应该改变变量
/**
* @var \DateTime $x
*/
private $x;
/**
* Set x
*
* @param datetime $x
*/
public function setX(\DateTime $x)
{
$this->x= $x;
}
作为通话
$em = $this->container->get('doctrine')->getEntityManager();
$new_entity = new EntityName();
$new_entity ->setX(new \DateTime());
$em->persist($new_entity );
$em->flush();
答案 1 :(得分:0)
更好的方法在MySQL方面做到这一点? 只需设置您的字段:
date_x TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
之后:
$new_entity->setX(null);
你将获得MySQL方面的当前日期:)