Symfony2 和 MSSQL Server 持久化日期

Posted

技术标签:

【中文标题】Symfony2 和 MSSQL Server 持久化日期【英文标题】:Symfony2 & MSSQL Server persisting dates 【发布时间】:2014-11-03 13:02:38 【问题描述】:

我有一个实体,其列“fecha”(日期时间)映射到 SQL Server 数据库。 当我尝试持久化到数据库时,出现错误:

执行 'UPDATE tor_jornada SET fecha = 时发生异常 ?, 坎查 = ?哪里 id = ?带参数 ["2014-09-14 00:00:00.000000", 1, 286]:

SQLSTATE[22007]:[Microsoft][SQL Server Native Client 11.0][SQL 服务器]从字符转换日期时间时转换失败 字符串。

当我将查询放在 SQL Server 管理中时,它会引发错误。 然后我在几毫秒内剪掉正确的零,将“2014-09-14 00:00:00.000000”更改为“2014-09-14 00:00:00.00”,它工作正常!

那么,我可以在 Symfony 中更改它吗?如何?在哪里?

实体:

namespace IM\ManTorneosBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * TorJornada
 *
 * @ORM\Table(name="tor_jornada", indexes=@ORM\Index(name="IDX_AB7D06987CEB63FE", columns="torneo"))
 * @ORM\Entity
 */
class TorJornada

    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @var integer
     *
     * @ORM\Column(name="jornada", type="integer", nullable=false)
     */
    private $jornada;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="fecha", type="datetime", nullable=false)
     */
    private $fecha;

 .....

【问题讨论】:

【参考方案1】:

在此之前格式化您的日期时间:

  $date = $datetime->format('Y-m-d H:i:s');

然后在查询中插入 $date 作为参数,这应该给你“2014-09-14 00:00:00”

【讨论】:

在哪里?我将对象保存到数据库中: *** $em->persist($jornada); $em->flush(); *** Doctrine 自动生成 sql。 code 命名空间 IM\ManTorneosBundle\Form;使用 Symfony\Component\Form\AbstractType;使用 Symfony\Component\Form\FormBuilderInterface;类 jornadaType 扩展 AbstractType public function buildForm(FormBuilderInterface $builder, array $options) $builder ->add('fecha', 'datetime') ->add('cancha', 'integer') ->add('equipo1 ') ->add('equipo2') ->add('marcador1') ->add('marcador2') ->add('Guardar', 'submit'); 公共函数 getName() return 'jornada_form'; code 我不知道如何在 cmets 中插入缩进,对不起。 试试这个代替 fecha $builder->add('fecha', null , array( 'date_widget' => "single_text", 'time_widget' => "single_text", 'required' => true )) 如果你的控制器里还有一个奇怪的日期格式,$fecha = $entity->getFecha(); $fecha = $fecha->format('Y-m-d H:i:s'); $entity->setFecha($fecha); 这最后一个建议不起作用,因为您将数据从 Datetime 更改为字符串并将其提供给 Symfony 对象。当 Symfony 尝试实际使用它获得的值并将其转换为自己的字符串时,它会窒息。它对给定的日期时间对象执行 ->format() 。不过,我想听到一个很好的解决方案。我知道你可以在 MsSql 中使用 datetime2 类型而不是 datetime 来解决它...

以上是关于Symfony2 和 MSSQL Server 持久化日期的主要内容,如果未能解决你的问题,请参考以下文章

使用 Symfony2 和 Doctrine 的 SQL Server 数据库连接

如何将Codeigniter与MSSQL(SQL Server)连接?

具有多个基表和完整性能的 Microsoft SQL Server (MSSQL) 可更新视图

MSSQL之二 Sql Server中管理库与表

[简约webAPI]php连接MSsql server的五种方法总结

SQL SERVER - 通过 SQLCMD 和 MSSQL 运行 SQL 脚本时相同的代码不同的结果