我的架构中有父/子关系。我想使用非常相似的代码来修改现有的父代,以创建一个新代码。编辑案例很容易找到孩子:
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所拥有的(以及我们的生产服务器正在运行)
答案 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仍然是空的。