設計が不十分なPostgreSQLデータベースでDoctrineを使用しようとしています。一部のテーブルには、TIMESTAMPフィールドである必要があるDATEフィールドとTIMEフィールドがあります。
DATEフィールドとTIMEフィールドのペアをクラスのDateTimeプロパティにマップすることは可能ですか?
設計が不十分なPostgreSQLデータベースでDoctrineを使用しようとしています。一部のテーブルには、TIMESTAMPフィールドである必要があるDATEフィールドとTIMEフィールドがあります。
DATEフィールドとTIMEフィールドのペアをクラスのDateTimeプロパティにマップすることは可能ですか?
オブジェクトをgetTimestamp()
返すメソッドを作成し、日付と時刻を別々に取得して 2 つの値を設定するメソッドを作成できます。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;
}
new \DateTime()
doctrine は日付、時刻、およびタイムスタンプとして DateTime インスタンスを必要とするため、params 値を a でラップする必要がある場合があります。
これにより、コードでサポートするシンプルなインターフェイスが提供されますが、データベース スキーマを抽象化することができます。
これらのフィールドを1つにまとめたビューを作成することもできます。次に、モデルクラスから、実際のテーブルの代わりにビューを使用します。