我想用一个设计不好的PostgreSQL数据库使用Doctrine。某些表具有应该是TIMESTAMP字段的DATE和TIME字段。有没有办法将多个字段映射到一个单独的属性?
是否有可能将一对DATE和TIME字段映射到我的类的DateTime属性中?
我想用一个设计不好的PostgreSQL数据库使用Doctrine。某些表具有应该是TIMESTAMP字段的DATE和TIME字段。有没有办法将多个字段映射到一个单独的属性?
是否有可能将一对DATE和TIME字段映射到我的类的DateTime属性中?
您可以创建一个方法getTimestamp()
,该方法将返回一个new \DateTime($this->getDate()->format('Y-m-d') . ' ' . $this->getTime()->format('H:i:s'))
对象并创建一个setTimestamp(\DateTime $date)
方法,该方法将通过get date和time分隔设置两个值。
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
你通过时间戳作为一个单一的PARAM和绑定2个PARAMS这样的:
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;
}
您可能需要换你PARAMS值在new \DateTime()
因为教义需要一个DateTime实例作为日期,时间和时间戳。
这给你一个简单的接口来支持你的代码,但允许抽象数据库模式。
伟大的解决方案,但我的DQL查询应该如何写? –
您还可以创建一个视图,其中这些字段合并为一个视图。然后从您的模型类使用视图,而不是真正的表。
我在想这件事,但处理upserts的视图规则的需求看起来比纯粹的PHP解决方案更复杂。 –
哪个教义版本? – j0k
我使用的是2.3.0。 –