#use Data::Dumper; warn Dumper($query);
#warn $rel_obj->{class}." $meth $cond ".join(', ', @{$attrs->{bind}||[]});
delete $attrs->{_action};
- return $self->resolve_class($rel_obj->{class}
+ return $self->result_source->schema->resultset($rel_obj->{class}
)->search($query, $attrs);
}
sub create_related {
my $class = shift;
- return $class->new_related(@_)->insert;
+ my $rel = shift;
+ return $class->search_related($rel)->create(@_);
}
=head2 new_related
sub new_related {
my ($self, $rel, $values, $attrs) = @_;
- $self->throw( "Can't call new_related as class method" )
- unless ref $self;
- $self->throw( "new_related needs a hash" )
- unless (ref $values eq 'HASH');
- my $rel_obj = $self->_relationships->{$rel};
- $self->throw( "No such relationship ${rel}" ) unless $rel_obj;
- $self->throw( "Can't abstract implicit create for ${rel}, condition not a hash" )
- unless ref $rel_obj->{cond} eq 'HASH';
- $attrs = { %{$rel_obj->{attrs}}, %{$attrs || {}}, _action => 'convert' };
-
- my %fields = %{$self->resolve_condition($rel_obj->{cond},$attrs)};
- $fields{$_} = $values->{$_} for keys %$values;
-
- return $self->resolve_class($rel_obj->{class})->new(\%fields);
+ return $self->search_related($rel)->new($values, $attrs);
}
=head2 find_related
my $self = shift;
my $rel = shift;
return $self->search_related($rel)->find(@_);
-
- # Marked for death.
- my $rel_obj = $self->_relationships->{$rel};
- $self->throw( "No such relationship ${rel}" ) unless $rel_obj;
- my ($cond) = $self->resolve_condition($rel_obj->{cond}, { _action => 'convert' });
- $self->throw( "Invalid query: @_" ) if (@_ > 1 && (@_ % 2 == 1));
- my $attrs = { };
- if (@_ > 1 && ref $_[$#_] eq 'HASH') {
- $attrs = { %{ pop(@_) } };
- }
- my $query = ((@_ > 1) ? {@_} : shift);
- $query = ($query ? { '-and' => [ $cond, $query ] } : $cond);
- return $self->resolve_class($rel_obj->{class})->find($query);
}
=head2 find_or_create_related
$self->throw( "set_from_related can only handle a hash condition; the "
."condition for $rel is of type ".(ref $cond ? ref $cond : 'plain scalar'))
unless ref $cond eq 'HASH';
- my $f_class = $self->resolve_class($rel_obj->{class});
+ my $f_class = $self->result_source->schema->class($rel_obj->{class});
$self->throw( "Object $f_obj isn't a ".$f_class )
unless $f_obj->isa($f_class);
foreach my $key (keys %$cond) {