An arrayref containing a list of accessors in the foreign class to proxy in
the main class. If, for example, you do the following:
- __PACKAGE__->might_have(bar => 'Bar', undef, { proxy => qw[/ margle /] });
+ __PACKAGE__->might_have(bar => 'Bar', undef, { proxy => [ qw/margle/ ] });
Then, assuming Bar has an accessor named margle, you can do:
=back
-=cut
+=head2 register_relationship($relname, $rel_info)
-sub add_relationship {
- shift->result_source->add_relationship(@_);
-}
+Registers a relationship on the class
-sub relationships {
- shift->result_source->relationships(@_);
-}
+=cut
-sub relationship_info {
- shift->result_source->relationship_info(@_);
-}
+sub register_relationship { }
=head2 search_related
$attrs = { %{ pop(@_) } };
}
my $rel_obj = $self->relationship_info($rel);
- $self->throw( "No such relationship ${rel}" ) unless $rel_obj;
+ $self->throw_exception( "No such relationship ${rel}" ) unless $rel_obj;
$attrs = { %{$rel_obj->{attrs} || {}}, %{$attrs || {}} };
- $self->throw( "Invalid query: @_" ) if (@_ > 1 && (@_ % 2 == 1));
+ $self->throw_exception( "Invalid query: @_" ) if (@_ > 1 && (@_ % 2 == 1));
my $query = ((@_ > 1) ? {@_} : shift);
my ($cond) = $self->result_source->resolve_condition($rel_obj->{cond}, $rel, $self);
+ if (ref $cond eq 'ARRAY') {
+ $cond = [ map { my %hash;
+ foreach my $key (keys %{$_}) {
+ unless ($key =~ m/\./) {
+ $hash{"me.$key"} = $_->{$key};
+ } else {
+ $hash{$key} = $_->{$key};
+ }
+ }; \%hash; } @$cond ];
+ } else {
+ foreach my $key (keys %$cond) {
+ unless ($key =~ m/\./) {
+ $cond->{"me.$key"} = delete $cond->{$key};
+ }
+ }
+ }
$query = ($query ? { '-and' => [ $cond, $query ] } : $cond);
#use Data::Dumper; warn Dumper($cond);
#warn $rel_obj->{class}." $meth $cond ".join(', ', @{$attrs->{bind}||[]});
=head2 count_related
- My::Table->count_related('relname', $cond, $attrs);
+ $obj->count_related('relname', $cond, $attrs);
=cut
sub set_from_related {
my ($self, $rel, $f_obj) = @_;
my $rel_obj = $self->relationship_info($rel);
- $self->throw( "No such relationship ${rel}" ) unless $rel_obj;
+ $self->throw_exception( "No such relationship ${rel}" ) unless $rel_obj;
my $cond = $rel_obj->{cond};
- $self->throw( "set_from_related can only handle a hash condition; the "
+ $self->throw_exception( "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->result_source->schema->class($rel_obj->{class});
- $self->throw( "Object $f_obj isn't a ".$f_class )
+ $self->throw_exception( "Object $f_obj isn't a ".$f_class )
unless $f_obj->isa($f_class);
foreach my $key (keys %$cond) {
next if ref $cond->{$key}; # Skip literals and complex conditions
- $self->throw("set_from_related can't handle $key as key")
+ $self->throw_exception("set_from_related can't handle $key as key")
unless $key =~ m/^foreign\.([^\.]+)$/;
my $val = $f_obj->get_column($1);
- $self->throw("set_from_related can't handle ".$cond->{$key}." as value")
+ $self->throw_exception("set_from_related can't handle ".$cond->{$key}." as value")
unless $cond->{$key} =~ m/^self\.([^\.]+)$/;
$self->set_column($1 => $val);
}