2012-10-26 74 views

回答

1

您可以创建一个方法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实例作为日期,时间和时间戳。

这给你一个简单的接口来支持你的代码,但允许抽象数据库模式。

+0

伟大的解决方案,但我的DQL查询应该如何写? –

0

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

+0

我在想这件事,但处理upserts的视图规则的需求看起来比纯粹的PHP解决方案更复杂。 –

相关问题