代码之家  ›  专栏  ›  技术社区  ›  derobert

阻止dbix::class调用与新的尚未插入的行相关的所有内容?

  •  2
  • derobert  · 技术社区  · 16 年前

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

    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 回复  |  直到 16 年前
        1
  •  1
  •   bish    16 年前

    您使用的是什么版本的dbix::class?我正在运行最新版本0.08112,似乎找不到新的结果集记录方法。但是,有一个 new_result 方法的效果与您正在使用的新记录方法相同。我尝试了以下代码,得到了一个空数组,如预期的那样:

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

    另外,根据 documentation 对于has-many关系,created accessor方法将在列表上下文中返回对象,因此不需要调用all。不过,我还是按照你的方式试过了,@children还是空的。