views:

64

answers:

1

I have a parent/child relationship in my schema. I'd like to use very similar code to modify an existing parent as to create a new one. The edit case is easy to find the children:

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

However, in the new case, something weird happens:

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

I expected to have @children to be empty, but instead I got back all children, regardless of parent.

I can do something like this (for each related-record accessor, 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});

}

Please tell me the right way to do this, as the above mustn't be it.

version: 0.08010, because that's what Debian Lenny has (and what our production servers are running)

+1  A: 

What version of DBIx::Class are you using? I'm running the most recent version, 0.08112, and I can't seem to find a new_record method for ResultSet. There is, however, a new_result method that looks like it would have the same effect as the new_record method you are using. I tried the following code and got an empty array, as expected:

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

Also, according to the documentation for a has_many Relationship, the created accessor method will return objects in list context, so you don't need to call all. I did try it the way you have it though, and @children was still empty.

bish
Sorry, yeah, I meant new_result... I'll fix my question...
derobert
I'm using 0.08010, because that's whats in Debian Lenny (which our production servers are running) has.
derobert
Were you able to get it to work?
bish
Well, I did a quick workaround until I can upgrade. I found that fix in the changelog.
derobert