symfony2 doctrine插入实体datetime错误的mysql格式

时间:2015-06-18 13:36:18

标签: php mysql symfony datetime doctrine-orm

我正在尝试将项目从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语句的方式

2 个答案:

答案 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方面的当前日期:)