防止DBIx :: Class调用与新的,尚未插入的行相关的所有内容?

时间:2009-11-11 22:06:45

标签: perl orm dbix-class

我的架构中有父/子关系。我想使用非常相似的代码来修改现有的父代,以创建一个新代码。编辑案例很容易找到孩子:

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

然而,在新案例中,发生了一些奇怪的事情:

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

我希望@children为空,但我会回到所有孩子,无论父母是谁。

我可以这样做(对于每个相关记录访问者,呕吐):

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所拥有的(以及我们的生产服务器正在运行)

1 个答案:

答案 0 :(得分:1)

您使用的是哪个版本的DBIx :: Class?我正在运行最新版本,0.08112,我似乎找不到ResultSet的new_record方法。但是,有new_result方法看起来与您正在使用的new_record方法具有相同的效果。我按照预期尝试了以下代码并获得了一个空数组:

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

此外,根据has_many Relationship的documentation,创建的访问器方法将返回列表上下文中的对象,因此您无需调用all。我确实以你的方式尝试了它,而且@children仍然是空的。