我创建了一个Doctrine2实体,并想在MySQL中映射一个字段到时间戳列。
/**
* @ORM\Table(name="biz_order")
* @ORM\Entity(repositoryClass="Acme\OrderBundle\Repository\OrderRepository")
*/
class Order
{
/**
* @ORM\Column(name="order_id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
// Lots of other fields ...
/**
* @ORM\Column(name="order_timestamp", type="datetime")
*/
private $createdOn;
}
注释类型为“datetime”时,出现以下错误:
条令\DBAL\Types\ConversionException:无法将数据库值“1390362851”转换为条令类型datetime。预期格式:Y-m-d H:i:s
在63行 /var/www/packer/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/ConversionException.php
在/var/www/packer/vendor/Doctrine/DBAL/lib/Doctrine/DBAL/Types/DateTimeType中的条令\DBAL\Types\ConversionException::conversionFailedFormat('1390362851','datetime','Y-m-dh:i:s')。php第67行
然而,在学说2.4留档我发现以下
datetime:将SQL日期时间/时间戳映射到PHP日期时间对象的类型。
如何将timestamp DB列映射到Doctrine2中的PHP类字段?
编辑:到目前为止,我的解决方案是在ORM映射中使用type="integer"并将其返回为ValueObject
public function getCreatedOn()
{
$createdOn = new \DateTime();
$createdOn->setTimestamp($this->createdOn);
return $createdOn;
}
您可以创建一个自定义的教义类型定义的时间戳,请参阅留档
你可以看看这篇文章:datetime vs timestamp
因为它是一个createdAt
属性,并且表示一个时间点,所以您可能想要获取在$createdAt
之前或之后创建的对象。
要做到这一点,你最好的选择是完全按照你所做的方式存储datetime,但是将一个\Datetime
对象关联到那个字段:$this-
最好的方法是使用生命周期回调
:
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Table(name="biz_order")
* @ORM\Entity(repositoryClass="Acme\OrderBundle\Repository\OrderRepository")
* @ORM\HasLifecycleCallbacks
*/
class Order
{
/**
* @ORM\Column(name="order_timestamp", type="datetime")
*/
private $createdAt;
/**
* @ORM\PrePersist
*/
public function doStuffOnPrePersist()
{
$this->createdAt= new \DateTime();
}
}