我想用一個設計不好的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。 –