当前位置: 首页 > 知识库问答 >
问题:

如何将MySQL列“timestamp”映射到具有Doctrine2的字段

范峰
2023-03-14

我创建了一个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;
}

共有2个答案

仇龙光
2023-03-14

你可以看看这篇文章: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();
    }


}

乜心思
2023-03-14

您可以创建一个自定义的教义类型定义的时间戳,请参阅留档

 类似资料:
  • 问题内容: 我所有的数据库表都应有一个endTime字段,默认情况下应为END_OF_TIME或类似的内容。我对2038的限制不满意,所以我希望endTime在mysql中为DATETIME类型。 我的Java代码是: 我可以通过手动创建带有DATETIME类型的endTime字段的表来解决,而不是将实体endTime映射到该列,但是我希望Hibernate自动生成表- 我该怎么做? 问题答案:

  • 假设我有一组字符串和一个散列函数(或任何单边函数)和一个测试函数。我想用Java8流创建一个从输入字符串到通过测试函数的哈希值的映射。我的问题是如何在中编写? 看来老的for循环是最简洁的解决方案。

  • 我正在开发一个使用Go的网站,并将其连接到弹性搜索。在弹性搜索中,我可以为索引类型设置动态字段。当我从弹性搜索中读取文档时,它将返回一个JSON对象作为结果,该对象可以包括具有动态名称的字段(或用户定义的字段)。 我可以获取JSON结果并将其解组到Go结构中,但我不知道将这些动态字段作为Go结构的一部分的最佳方法是什么。 这就是我正在做的。例如,如果我从弹性搜索中获得一个联系人的文档,它可能看起来

  • 实体类如下: 是否有任何方法可以将实体中的Transstatus列映射到枚举的整数值,即状态代码,例如,如果我有枚举值作为NOT_FOUND实体中的Transstatus值应该是12, 编辑请注意,我有两个枚举状态码的值,状态码字符串,我们想要的只是状态码,我们已经用“Ordinal”尝试过了,它打印枚举的整数值,而不是我示例中的状态码

  • 我有两个表:TABLE_A和TABLE_B,它们有一些同名的列。 我想从这两个表中检索所有列,并使用Jooq将查询结果转换为Pojo类,如下所示: 我想使用@Column注释来指定哪个列来自哪个表,但Jooq似乎不支持这个特性。我如何实现这一点? 或者这个,