DBIO
view release on metacpan or search on metacpan
lib/DBIO/Relationship/Base.pm view on Meta::CPAN
}
sub search_related {
return shift->related_resultset(shift)->search(@_);
}
sub search_related_rs {
return shift->related_resultset(shift)->search_rs(@_);
}
sub count_related {
shift->search_related(@_)->count;
}
sub new_related {
my ($self, $rel, $data) = @_;
return $self->search_related($rel)->new_result( $self->result_source->_resolve_relationship_condition (
infer_values_based_on => $data,
rel_name => $rel,
self_result_object => $self,
foreign_alias => $rel,
self_alias => 'me',
)->{inferred_values} );
}
sub create_related {
my $self = shift;
my $rel = shift;
my $obj = $self->new_related($rel, @_)->insert;
delete $self->{related_resultsets}->{$rel};
return $obj;
}
sub find_related {
#my ($self, $rel, @args) = @_;
return shift->search_related(shift)->find(@_);
}
sub find_or_new_related {
my $self = shift;
my $obj = $self->find_related(@_);
return defined $obj ? $obj : $self->new_related(@_);
}
sub find_or_create_related {
my $self = shift;
my $obj = $self->find_related(@_);
return (defined($obj) ? $obj : $self->create_related(@_));
}
sub update_or_create_related {
#my ($self, $rel, @args) = @_;
shift->related_resultset(shift)->update_or_create(@_);
}
sub set_from_related {
my ($self, $rel, $f_obj) = @_;
$self->set_columns( $self->result_source->_resolve_relationship_condition (
infer_values_based_on => {},
rel_name => $rel,
foreign_values => $f_obj,
foreign_alias => $rel,
self_alias => 'me',
)->{inferred_values} );
return 1;
}
sub update_from_related {
my $self = shift;
$self->set_from_related(@_);
$self->update;
}
sub delete_related {
my $self = shift;
my $obj = $self->search_related(@_)->delete;
delete $self->{related_resultsets}->{$_[0]};
return $obj;
}
1;
__END__
=pod
=encoding UTF-8
=head1 NAME
DBIO::Relationship::Base - Inter-table relationships
=head1 VERSION
version 0.900001
=head1 SYNOPSIS
__PACKAGE__->add_relationship(
spiders => 'My::DB::Result::Creatures',
sub {
my $args = shift;
return {
"$args->{foreign_alias}.id" => { -ident => "$args->{self_alias}.id" },
"$args->{foreign_alias}.type" => 'arachnid'
};
},
);
See F<t/relationship/dynamic_foreign_columns.t> for a runnable example.
=head1 DESCRIPTION
This class provides methods to describe the relationships between the
tables in your database model. These are the "bare bones" relationships
methods, for predefined ones, look in L<DBIO::Relationship>.
=head1 METHODS
=head2 add_relationship
=over 4
=item Arguments: $rel_name, $foreign_class, $condition, $attrs
=back
( run in 1.503 second using v1.01-cache-2.11-cpan-600a1bdf6e4 )