3

DBIx::ClasseBayオークションを表すオブジェクトがあります。基になるテーブルには、多くのデータを含む説明列があります。説明列はほとんど使用されないため、DBIx::Classそのテーブルの列リストには含まれていません。このように、ほとんどのクエリはオークションの説明データをフェッチしません。

ただし、この列を必要とするスクリプトが1つあります。この1つのケースでは、他の列と同じように、説明列の内容にアクセスします。

$auction->description

他のすべてのクエリに説明列をフェッチさせることなく、これを実現するにはどうすればよいですか?

4

1 に答える 1

3

古いバージョンDBIx::Class(バージョン番号がわからない)では、以下が機能していました。

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

これは、の最新バージョンでの行の更新では機能しないようですDBIx::Class。アップデートでそれを試してみてください

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

DBIx::Class0.08123未満では、次のエラーが発生します:「DBIx :: Class :: Relationship :: CascadeActions :: update():そのような列の説明は...にありません」

追加の列を必要とするスクリプトが独自のプロセスで実行されていると仮定します。あなたはこのようなことをすることができます:

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

もちろん、それは地球規模の変化です。列を追加した後、同じプロセス内の他のコードがdescriptionクエリで列のフェッチを開始します。言うまでもなく、それはちょっと醜いです。

于 2010-12-03T17:23:42.457 に答える