2010-03-10 52 views
4

我從來沒有用過DBIx :: Class,直到今天,所以我對它完全陌生。Perl DBIx :: Class可以重寫從數據庫檢索列的方式嗎?

我不確定這是否可能,但基本上我有一個在我的SQLite數據庫中有一個時間戳列的表。時間戳列的默認值是「CURRENT_TIMESTAMP」。 SQLite存儲在GMT時區,但我的服務器在CDT時區。

我的SQLite查詢來獲得正確的時區的時間戳是這樣的:

select datetime(timestamp, 'localtime') from mytable where id=1; 

我想知道如果它在我的DBIx架構「MyTable的」,迫使它每一個申請的日期時間函數是可能的它是從數據庫中檢索「時間戳」字段的時間嗎? (),find(),但是我想知道是否有可能使它成爲可能,如果我使用search(),find()方法, all(),find_or_new()或將從數據庫中提取此列的任何函數,它會將datetime()SQLite函數應用於它?

DBIx :: Class似乎有很好的文檔 - 我想我只是這麼新而已,我找不到合適的地方/要搜索的東西。

在此先感謝!

+0

我找到了DBIx :: Class :: InflateColumn :: DateTime文檔,並嘗試在我的列定義中放置timezone =>「America/Chicago」。儘管這似乎沒有什麼區別。 – BrianH 2010-03-10 17:43:39

+0

它看起來像我可以使用inflate_column()方法,但似乎每當我檢索一個記錄集,我需要得到時間戳列的膨脹版本 - 有沒有辦法將充氣版本作爲默認值? – BrianH 2010-03-10 18:50:07

+0

這看起來有點接近,但不確定如何使用它: http://search.cpan.org/~ribasushi/DBIx-Class-0.08120/lib/DBIx/Class/Manual/Cookbook.pod#Wrapping/overloading_a_column_accessor – BrianH 2010-03-10 19:15:10

回答

2

我已經用這種方式和時間戳使用InflateColumn :: DateTime,我可以確認它的工作原理,但我不知道你是否有這種落後。

如果您的列使用UTC,請將UTC列標出,然後在加載它時應爲UTC時間。然後,當你在DateTime上設置時區(假設這是一個輸出問題 - 它是在輸出時,你關心它是在本地劃分的),你可以將它設置爲當地時間,它將進行必要的調整。

相關問題