Oryx
view release on metacpan or search on metacpan
lib/Oryx/Association.pm view on Meta::CPAN
an associtation.
=cut
sub class {
my $self = shift;
unless (defined $self->{class}) {
$self->{class} = $self->getMetaAttribute("class");
}
$self->{class};
}
=item role
Simple accessor to the association accessor name defined in the
source class. Defaults to the target class' table name.
=cut
sub role {
my $self = shift;
unless (defined $self->{role}) {
$self->{role} = $self->getMetaAttribute("role");
unless ($self->{role}) {
# set some sensible defaults for creating the accessor
$self->{role} = $self->class->table;
}
}
$self->{role};
}
=item type
Reference, Array or Hash... defaults to Reference.
=cut
sub type {
my $self = shift;
unless (defined $self->{type}) {
$self->{type} = $self->getMetaAttribute("type")
|| 'Reference';
}
$self->{type};
}
=item is_weak
Simple accessor to the C<is_weak> meta-attribute. This is used
for stopping Reference association types from creating a column
in the target class for storing a reverse association.
=cut
sub is_weak { $_[0]->getMetaAttribute('is_weak') }
=item constraint
Simple accessor to the C<constraint> meta-attribute. Values are:
Aggregate or Composition ... Aggregate is the default,
Composition causes deletes to cascade.
=cut
sub constraint {
my $self = shift;
unless (defined $self->{constraint}) {
$self->{constraint} = $self->getMetaAttribute("constraint")
|| 'Aggregate';
}
$self->{constraint};
}
=item update_backrefs
Updates reverse Reference associations.
B<NOTE:> Currently, reverse associations are made up of two
unidirectional associations... link tables are therefore not shared.
This will be fixed.
=cut
sub update_backrefs {
my ($self, $obj, @things) = @_;
foreach my $rev_assoc (values %{$self->class->associations}) {
unless ($rev_assoc->type eq 'Reference') {
$self->_carp(
'weak associations not supported for non-Reference types'
);
next;
}
if ($rev_assoc->class eq $self->source) {
my $backref = $rev_assoc->role;
foreach my $target (@things) {
$target->$backref($obj);
$target->update unless $rev_assoc->is_weak;
}
}
}
}
=item link_table
Returns a name for the link table for this association. Not relevant
for Reference associations as these don't require a link table.
This is just a shortcut for:
$self->source->table.'_'.$self->role.'_'.$self->class->table
Override for custom association types as needed.
=cut
sub link_table {
my $self = shift;
return $self->source->table.'_'.$self->role.'_'.$self->class->table;
}
1;
( run in 0.529 second using v1.01-cache-2.11-cpan-5a3173703d6 )