=cut
sub add_relationship {
- my ($class, $rel, $f_class, $cond, $attrs) = @_;
- die "Can't create relationship without join condition" unless $cond;
- $attrs ||= {};
- eval "require $f_class;";
- if ($@) {
- $class->throw($@) unless $@ =~ /Can't locate/;
- }
- my %rels = %{ $class->_relationships };
- $rels{$rel} = { class => $f_class,
- cond => $cond,
- attrs => $attrs };
- $class->_relationships(\%rels);
-
- return unless eval { $f_class->can('columns'); }; # Foreign class not loaded
- eval { $class->_resolve_join($rel, 'me') };
-
- if ($@) { # If the resolve failed, back out and re-throw the error
- delete $rels{$rel}; #
- $class->_relationships(\%rels);
- $class->throw("Error creating relationship $rel: $@");
- }
- 1;
+ shift->result_source->add_relationship(@_);
+}
+
+sub relationships {
+ shift->result_source->relationships(@_);
+}
+
+sub relationship_info {
+ shift->result_source->relationship_info(@_);
}
sub _resolve_join {
return map { $class->_resolve_join($_, $alias) } @$join;
} elsif (ref $join eq 'HASH') {
return map { $class->_resolve_join($_, $alias),
- $class->_relationships->{$_}{class}->_resolve_join($join->{$_}, $_) }
+ $class->relationship_info($_)->{class}->_resolve_join($join->{$_}, $_) }
keys %$join;
} elsif (ref $join) {
$class->throw("No idea how to resolve join reftype ".ref $join);
} else {
- my $rel_obj = $class->_relationships->{$join};
+ my $rel_obj = $class->relationship_info($join);
+ #use Data::Dumper; warn Dumper($class->result_source) unless $rel_obj;
$class->throw("No such relationship ${join}") unless $rel_obj;
my $j_class = $rel_obj->{class};
my %join = (_action => 'join',
if (@_ > 1 && ref $_[$#_] eq 'HASH') {
$attrs = { %{ pop(@_) } };
}
- my $rel_obj = $self->_relationships->{$rel};
+ my $rel_obj = $self->relationship_info($rel);
$self->throw( "No such relationship ${rel}" ) unless $rel_obj;
$attrs = { %{$rel_obj->{attrs} || {}}, %{$attrs || {}} };
sub set_from_related {
my ($self, $rel, $f_obj) = @_;
- my $rel_obj = $self->_relationships->{$rel};
+ my $rel_obj = $self->relationship_info($rel);
$self->throw( "No such relationship ${rel}" ) unless $rel_obj;
my $cond = $rel_obj->{cond};
$self->throw( "set_from_related can only handle a hash condition; the "