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_result方法看起来与您正在使用的 new_record 方法具有相同的效果。我尝试了以下代码并得到了一个空数组,正如预期的那样:

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

此外,根据 has_many 关系的文档,创建的访问器方法将返回列表上下文中的对象,因此您不需要调用 all。我确实按照您的方式尝试过,但@children 仍然是空的。

于 2009-11-12T05:41:05.900 回答