2

スキーマに親子関係があります。非常によく似たコードを使用して、既存の親を変更し、新しい親を作成したいと思います。編集ケースは子供を見つけるのが簡単です:

my $parent = $resultset->find($parent_id);
my @children = $parent->children->all

ただし、新しいケースでは、何か奇妙なことが起こります。

my $parent = $resultset->new_result({});
my @children = $parent->children->all;

私は@children空でなければならないと思っていましたが、代わりに親に関係なくすべての子供を取り戻しました。

私はこのようなことをすることができます(関連するレコードアクセサーごとに、vomit):

sub children {
    my $self = shift;

    my $res = $self->next::method(@_);
    my $parent_no = $self->get_column('parent_no');
    defined $parent_no ? $res : $res->search({1 => 2});

}

上記はそうではないので、これを行う正しい方法を教えてください。

バージョン: 0.08010、これはDebian Lennyが持っているもの(および本番サーバーが実行しているもの)だからです

4

1 に答える 1

1

どのバージョンのDBIx::Classを使用していますか?最新バージョンの0.08112を実行していますが、ResultSetのnew_recordメソッドが見つからないようです。ただし、使用しているnew_recordメソッドと同じ効果があるように見えるnew_resultメソッドがあります。次のコードを試してみたところ、期待どおりに空の配列が取得されました。

my $parent = $resultset->new_result({});
my @children = $parent->children();

また、has_manyリレーションシップのドキュメントによると、作成されたアクセサーメソッドはリストコンテキストでオブジェクトを返すため、allを呼び出す必要はありません。私はあなたがそれを持っている方法でそれを試しました、そして@childrenはまだ空でした。

于 2009-11-12T05:41:05.900 に答える