2010-12-03 7 views
3

私はオークションを表すDBIx::Classオブジェクトを持っています。基礎となる表には、多くのデータを含む説明列があります。説明列はほとんど使用されないため、その表のDBIx::Class列リストには含まれていません。そうすれば、ほとんどのクエリはオークションの説明データを取得しません。DBIx :: Class ResultSetに列を動的に追加

ただし、この列が必要なスクリプトは1つあります。私は説明欄をフェッチするために他のすべてのクエリを強制することなくこれを実現するにはどうすればよい

$auction->description 

:この一つのケースでは、私は、他の列を同じように記述欄の内容にアクセスしたいですか?

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

DBIx::Classの最近のバージョンの下の行の更新のために動作していないよう:DBIx::Classの旧バージョン(バージョン番号がわからない)、働いて以下に

答えて

3

DBIx::Class 0.08123下アップデート

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

ていることをしようとすると、次のエラーを与える: "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列のフェッチを開始します。言うまでもなく、それは一種の醜いです。

関連する問題