我创建了一个doctrine2 entity,并希望将字段映射到mysql中的时间戳列。
/**
* @ORMTable(name="biz_order")
* @ORMEntity(repositoryClass="AcmeOrderBundleRepositoryOrderRepository")
*/
class Order
{
/**
* @ORMColumn(name="order_id", type="integer")
* @ORMId
* @ORMGeneratedValue(strategy="AUTO")
*/
private $id;
// Lots of other fields ...
/**
* @ORMColumn(name="order_timestamp", type="datetime")
*/
private $createdOn;
}
用注释类型为" dateTime",我会得到以下错误:
Doctrine dbal type cenversionException:无法将数据库值" 1390362851"转换为Doctrine Type DateTime。预期格式:Y-M-D H:I:S
n/a in/var/www/packer/vendor/doctrine/dbal/lib/doctrine/dbal/types/conversionexpection.php line 63
在Doctrine dbal type type conversionException :: conversionfailedFormat('1390362851','datetime','y-m-d h:i:s') in/var/www/packer/vendor/doctrine/dbal/lib/doctrine/dbal/types/datetemetype.php line 67
但是,在学说2.4文档中,我发现了以下内容
dateTime:键入将SQL DateTime/Timestamp映射到PHP DateTime对象。
如何将Timestamp DB列映射到Doctrine2中的PHP类字段?
编辑:到目前为止
public function getCreatedOn()
{
$createdOn = new DateTime();
$createdOn->setTimestamp($this->createdOn);
return $createdOn;
}
您只需创建自定义学说类型定义的时间戳,请参阅文档
您可以查看此帖子:DateTime vs Timestamp
由于它是createdAt
属性,并且代表一个时间点,因此您可能需要获取在$createdAt
之前或$createdAt
之前创建的对象。
为此,您最好的选择是将DateTime完全存储您完成的方式,但将Datetime
对象关联到该字段:$this->createdAt = new Datetime();
最好的方法是使用lifecycle callbacks
:
use DoctrineORMMapping as ORM;
/**
* @ORMTable(name="biz_order")
* @ORMEntity(repositoryClass="AcmeOrderBundleRepositoryOrderRepository")
* @ORMHasLifecycleCallbacks
*/
class Order
{
/**
* @ORMColumn(name="order_timestamp", type="datetime")
*/
private $createdAt;
/**
* @ORMPrePersist
*/
public function doStuffOnPrePersist()
{
$this->createdAt= new DateTime();
}
}