1

設計が不十分なPostgreSQLデータベースでDoctrineを使用しようとしています。一部のテーブルには、TIMESTAMPフィールドである必要があるDATEフィールドとTIMEフィールドがあります。

DATEフィールドとTIMEフィールドのペアをクラスのDateTimeプロパティにマップすることは可能ですか?

4

2 に答える 2

1

オブジェクトを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 でラップする必要がある場合があります。

これにより、コードでサポートするシンプルなインターフェイスが提供されますが、データベース スキーマを抽象化することができます。

于 2012-10-26T15:34:22.753 に答える
0

これらのフィールドを1つにまとめたビューを作成することもできます。次に、モデルクラスから、実際のテーブルの代わりにビューを使用します。

于 2012-10-26T14:11:35.440 に答える