4

我正在尝试将 mysql 日期时间存储在 Symfony 存储库中,但出现错误。尝试了来自网络和堆栈的几个建议,但没有什么能让这个错误消失。这就是我想要做的(为了清楚起见,代码被缩写)

我的实体字段:

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

我的回购代码:

$reservedays = 84;
$now = new \DateTime('NOW');
$now->modify('+' . $reservedays .' days');
$payment = new AppBundle\Entity\Payment;
$payment->setCreated( $now->format('Y-m-d h:i:s') );

但我一直收到这个错误:

Error: Call to a member function format() on string
500 Internal Server Error - FatalErrorException 

Stack Trace:
1. in vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/DateTimeType.php at line 53  -

    public function convertToDatabaseValue($value, AbstractPlatform $platform)
    {
        return ($value !== null)
            ? $value->format($platform->getDateTimeFormatString()) : null;
    }
    /**

如您所见,我想获取当前日期并将其添加 84 天,然后将其存储到 mysql 日期时间中,但无论我尝试了什么,此错误都会不断出现。任何人?

4

2 回答 2

4

创建新的 DateTime 对象时不必使用“NOW”。您可以简单地$now = new \DateTime()用于实际日期/时间。

对于您的情况 - 创建 DateTime 对象是完全可以的,通过添加 XYdays 对其进行修改,因此:

$reservedays = 84;
$now = new \DateTime();
$now->modify('+' . $reservedays .' days');

但是您应该使用 DateTime 对象作为setCreated()方法参数,因为该$created属性具有 \DateTime 类型。Symfony 中的 Doctrine 层负责将数据正确地持久化到数据库中,所以这应该可以正常工作:

$payment = new AppBundle\Entity\Payment;
$payment->setCreated($now);
于 2017-03-18T23:49:51.903 回答
1

您正在尝试将 a 保存stringdatetime列中。停止调用format() // <- Returns a string,它会工作。

$createdAt此外,您可以通过在 Payment 对象的构造方法中进行初始化来简化一切。每当调用该类的新实例时,都会调用构造函数。您还可以将变量传递给构造函数。

例如

// AppBundle\Entity\Payment
//...
class Payment
{
    //...
    // Set a default value for the passed-in variable.
    public function __construct($reserveDays = 0)
    {
        $this->createdAt = new \DateTime('+'.$reserveDays.' days');
    }
}

用法

// AppBundle\Controller\PaymentController.php
//...
$payment = new AppBundle\Entity\Payment(84);
于 2017-03-19T03:46:26.600 回答