2010-12-03 37 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列。更何况,这有点丑。

相关问题