ORM无法将datetime转换为字符串,因为datetime用作主键

时间:2017-10-19 13:44:30

标签: symfony datetime doctrine-orm doctrine symfony-3.3

我有一个问题,因为我使用的是现有数据库,在很多表中,他们使用带有多个外键的主键,还有一些包括Datetime。

所以当你这样做时:

/**
 * @var \DateTime
 *
 * @ORM\Column(name="DT_DEBUT", type="date")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="NONE")
 */
private $dtDebut;

然后运行服务器会给你一个错误,例如:

  

Catchable Fatal Error:类DateTime的对象无法转换为字符串

然后我发现this post并尝试使用解决方案,但我仍然遇到问题。

这是MyDateTime.php

<?php

namespace AppBundle\Types;

use Doctrine\DBAL\Types\DateTimeType;
use Doctrine\DBAL\Types\Type;
use Doctrine\DBAL\Platforms\AbstractPlatform;

/**
 * Custom datatype to convert dateTime into a string
 */
class MyDateTimeType extends DateTimeType
{
    const MYDATETIME = 'mydatetime'; 

    public function getSQLDeclaration(array $fieldDeclaration, AbstractPlatform $platform)
    {
        return 'MyDateTime';
    }

    public function convertToPHPValue($value, AbstractPlatform $platform)
    {
        $dateTime = parent::convertToPHPValue($value, $platform);

        if ( ! $dateTime) {
            return $dateTime;
        }

        return new MyDateTime('@' . $dateTime->format('Y-m-d h:i:s'));
    }

    public function convertToDatabaseValue($value, AbstractPlatform $platform)
    {
        return $value->format('Y-m-d h:i:s');
    }

    public function getName()
    {
        return self::MYDATETIME;
    }
}

我做了另一个文件MyDateTime.php

<?php

namespace AppBundle\Types;

class MyDateTime extends \Datetime 
{
    public function __toString()
    {
        return $this->format('Y-m-d h:i:s');
    }
}

最后,当然,我用config:

更新了我的config.xml
types:
            mydatetime: AppBundle\Types\MyDateTimeType

但我有这个新问题:

  

DateTime :: __ construct():无法解析位置8( - )的时间字符串(@ 1999-03-18 12:00:00):双时区规范

有人能帮帮我吗? :)

0 个答案:

没有答案