2010-09-21 61 views
3

我想知道如何在Symfony/Doctrine中將MySQL時區設置爲UTC(SET time_zone = 'UTC'),所以當我在查詢中調用DATETIME字段的UNIX_TIMESTAMP()函數時,它返回UTC unix時間而不是unix時間在服務器的時區。如何在doctrine/symfony中設置MysQL變量(time_zone)?

如何在每次連接時自動執行此操作,或者在時區產生差異的這些類型的查詢之前手動執行此操作?

順便說一句,我需要做的MySQL查詢,而不是在這個轉換的應用程序,所以我可以GROUP BY需要劃時代時間間隔。

回答

2

您可以通過configureDoctrineConnection回調被調用在ProjectConfiguration`做到這一點。

(答案編輯以去除有缺陷產生額外的方法。)

+0

第一個給出錯誤「沒有開放連接......」,但第二個很好,謝謝。注意:我猜「UTC」至少在我的機器上不是有效的時區,所以我將其更改爲「+0:00」。 – scotts 2010-09-21 15:37:33

1

我會嘗試編輯projectConfiguration,並添加像(未經測試和未經驗證):

$databaseManager = new sfDatabaseManager($this->configuration); 
    $connection = $databaseManager->getDatabase($options['connection'])->getConnection(); 
    $diff = $connection->execute("SET time_zone = 'UTC'"); 

注意,$options$this->configuration僅在一個任務可用,所以也許這應該是硬編碼的(我相信默認是'doctrine')。如果你正在使用多個連接

public function configureDoctrineConnection(Doctrine_Connection $connection) 
{ 
    $connection->exec('SET time_zone = "UTC"'); 
} 

與此可能有問題:

+0

不工作開箱即用的,我不知道有足夠的瞭解Symfony的解決得很好($這個 - >配置是在這種背景下..空)這裏所提供的解決方案 – scotts 2010-09-21 15:33:58

+0

不必是工作開箱即用;我只是指出你找到答案的正確方向(在這種情況下,這將是傑里米的答案)。 – bouke 2010-09-21 16:36:25

+0

我並不是想暗示他們這樣做,只是我沒有花太多時間解決問題(因爲有另一個答案立即生效)。謝謝。 – scotts 2010-09-22 14:58:23

0

如果你想在Symfony的應用水平,做到這一點,方法是將本該config/settings.yml

all: 
    .settings: 
    default_culture: en_US 
    default_timezone: Asia/Kolkata