1

我正在尝试将 Doctrine 与设计不佳的 PostgreSQL 数据库一起使用。一些表的 DATE 和 TIME 字段应该是 TIMESTAMP 字段。

是否可以将一对 DATE 和 TIME 字段映射到我的课程的 DateTime 属性中?

4

2 回答 2

1

您可以创建一个getTimestamp()返回new \DateTime($this->getDate()-­>format('Y-m-d') . ' ' . $this->getTime()->format('H:i:s'))对象的setTimestamp(\DateTime $date)方法,并创建一个通过分别获取日期和时间来设置这两个值的方法。

public function setDate(\DateTime $date)
{
    $this->date = $date;
}

public function getTime()
{
    return $date;
}

public function setTime(\DateTime $date)
{
    $this->date = $date;
}

public function getTime()
{
    return $date;
}

public function getTimeStamp() {
    return new \DateTime($this-­­>getDate()-­>format('Y-m-d') . ' ' . $this->getTime()->format('H:i:s'));
}

public function setTimeStamp(\DateTime $timestamp) {
    $this->setDate(new \DateTime($timestamp->format('Y-m-d'));
    $this->setTime(new \DateTime($timestamp->format('H:i:s'));
}

或类似的东西。get/setTimestamp()然后,您可以在您的代码中专门使用。

DQL

您将时间戳作为单个参数传递,然后像这样绑定 2 个参数:

public function getSomething(\DateTime $timestamp, $someparam) {

    $dql = "SELECT ... FROM ... WHERE date = :date AND time = :time"

    // Create query and params binding
    // param('date', $timestamp-­>format('Y-m-d'));
    // param('time', $timestamp-­>format('H:i:s'));

    return $result;

}

您可能必须将参数值包装在 a 中,new \DateTime()因为原则需要 DateTime 实例作为日期、时间和时间戳。

这为您提供了一个简单的接口来支持您的代码,但允许对数据库模式进行抽象。

于 2012-10-26T15:34:22.753 回答
0

您还可以创建一个视图,其中将这些字段组合为一个。然后从您的模型类中使用视图而不是真实表。

于 2012-10-26T14:11:35.440 回答