我有一个DBIx::Class
代表 eBay 拍卖的对象。基础表有一个描述列,其中包含大量数据。描述列几乎从未使用过,因此它不包含在该DBIx::Class
表的列列表中。这样,大多数查询都不会获取拍卖描述数据。
但是,我确实有一个脚本需要这个专栏。在这种情况下,我想像访问任何其他列一样访问描述列的内容:
$auction->description
如何在不强制所有其他查询获取描述列的情况下完成此操作?
我有一个DBIx::Class
代表 eBay 拍卖的对象。基础表有一个描述列,其中包含大量数据。描述列几乎从未使用过,因此它不包含在该DBIx::Class
表的列列表中。这样,大多数查询都不会获取拍卖描述数据。
但是,我确实有一个脚本需要这个专栏。在这种情况下,我想像访问任何其他列一样访问描述列的内容:
$auction->description
如何在不强制所有其他查询获取描述列的情况下完成此操作?
在旧版本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::Class::Relationship::CascadeActions::update(): No such column description at ...”
假设需要额外列的脚本正在其自己的进程中运行。你可以这样做:
my $rs = $schema->resultset('Auctions');
$rs->result_source->add_columns('description');
YourApp::Schema::Lots->add_columns('description');
YourApp::Schema::Lots->register_column('description');
当然,这是一个全球性的变化。添加列后,同一进程中的其他代码将开始description
在查询中获取该列。更不用说,它有点丑陋。