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) 可更新视图