2010-12-03 32 views
3

我有一個代表eBay拍賣的DBIx::Class對象。基礎表具有包含大量數據的描述列。說明列幾乎從不使用,所以它不包含在該表的DBIx::Class列列表中。這樣,大多數查詢不會獲取拍賣描述數據。動態添加列到DBIx :: Class ResultSet

但是,我確實需要一個需要此列的腳本。在這一種情況下,我要訪問的描述列的內容,因爲我對任何其他列:

$auction->description 

我怎麼能做到這一點,而不強迫所有其他查詢,以獲取描述列?

回答

3

在老版本的DBIx::Class(不知道的版本號),下面用來工作:

my $rs = $schema->resultset('Auctions'); 
my $lots = $rs->search(
    undef, 
    { '+select' => 'description', '+as' => 'description' }, 
); 

似乎這不是下DBIx::Class現代版本的行更新工作。試圖與更新

$auction->update({ description => '...'}) 

DBIx::Class 0.08123提供了以下錯誤: 「DBIx ::類::和:: CascadeActions ::更新():沒有這樣的列描述在......」

假設需要額外列的腳本正在其自己的進程中運行。你可以這樣做:

my $rs = $schema->resultset('Auctions'); 
$rs->result_source->add_columns('description'); 
YourApp::Schema::Lots->add_columns('description'); 
YourApp::Schema::Lots->register_column('description'); 

當然,這是一個全球性的變化。添加列後,同一進程中的其他代碼將開始在查詢中獲取description列。更何況,這有點醜。

相關問題