DBIx-Class-Events
view release on metacpan or search on metacpan
events_relationship
An class accessor that returns the relationship to get from your object
to the relationship.
Default is events, but you can override it:
__PACKAGE__->has_many(
'cd_events' =>
( 'MyApp::Schema::Result::ArtistEvents', 'cdid' ),
{ cascade_delete => 0 },
);
__PACKAGE__->events_relationship('cd_events');
Tables
Tracked Table
The table with events to be tracked in the "Tracking Table".
package MyApp::Schema::Result::Artist;
use base qw( DBIx::Class::Core );
...;
__PACKAGE__->load_components( qw/ Events / );
# A different name can be used with the "events_relationship" attribute
__PACKAGE__->has_many(
'events' => ( 'MyApp::Schema::Result::ArtistEvent', 'artistid' ),
{ cascade_delete => 0 },
);
You can also add custom events to track when something happens. For
example, you can create a method to add events when an artist changes
their name:
__PACKAGE__->add_column(
last_name_change_id => { data_type => 'integer' } );
__PACKAGE__->has_one(
'last_name_change' => 'MyApp::Schema::Result::ArtistEvent',
{ 'foreign.artisteventid' => 'self.last_name_change_id' },
{ cascade_delete => 0 },
);
sub change_name {
my ( $self, $new_name ) = @_;
my $event = $self->event( name_change =>
{ details => { new => $new_name, old => $self->name } } );
$self->last_name_change( $event );
# $self->update; # be lazy and make our caller call ->update
lib/DBIx/Class/Events.pm view on Meta::CPAN
=head2 events_relationship
An class accessor that returns the relationship to get from your object
to the relationship.
Default is C<events>, but you can override it:
__PACKAGE__->has_many(
'cd_events' =>
( 'MyApp::Schema::Result::ArtistEvents', 'cdid' ),
{ cascade_delete => 0 },
);
__PACKAGE__->events_relationship('cd_events');
=head2 Tables
=head3 Tracked Table
The table with events to be tracked in the L</Tracking Table>.
lib/DBIx/Class/Events.pm view on Meta::CPAN
package MyApp::Schema::Result::Artist;
use base qw( DBIx::Class::Core );
...;
__PACKAGE__->load_components( qw/ Events / );
# A different name can be used with the "events_relationship" attribute
__PACKAGE__->has_many(
'events' => ( 'MyApp::Schema::Result::ArtistEvent', 'artistid' ),
{ cascade_delete => 0 },
);
You can also add custom events to track when something happens. For example,
you can create a method to add events when an artist changes their name:
__PACKAGE__->add_column(
last_name_change_id => { data_type => 'integer' } );
__PACKAGE__->has_one(
'last_name_change' => 'MyApp::Schema::Result::ArtistEvent',
{ 'foreign.artisteventid' => 'self.last_name_change_id' },
{ cascade_delete => 0 },
);
sub change_name {
my ( $self, $new_name ) = @_;
my $event = $self->event( name_change =>
{ details => { new => $new_name, old => $self->name } } );
$self->last_name_change( $event );
# $self->update; # be lazy and make our caller call ->update
t/lib/MyApp/Schema/Result/Artist.pm view on Meta::CPAN
);
__PACKAGE__->set_primary_key('artistid');
__PACKAGE__->add_unique_constraint([qw( name )]);
__PACKAGE__->has_many('cds' => 'MyApp::Schema::Result::Cd', 'artistid');
__PACKAGE__->has_many(
'events' => ( 'MyApp::Schema::Result::ArtistEvent', 'artistid' ),
{ cascade_delete => 0 },
);
__PACKAGE__->add_column(
previousid => { data_type => 'integer' } );
__PACKAGE__->has_one(
'previously' => 'MyApp::Schema::Result::Artist',
{ 'foreign.artistid' => 'self.previousid' },
{ cascade_delete => 0 },
);
__PACKAGE__->add_column(
last_name_change_id => { data_type => 'integer' } );
__PACKAGE__->has_one(
'last_name_change' => 'MyApp::Schema::Result::ArtistEvent',
{ 'foreign.artisteventid' => 'self.last_name_change_id' },
{ cascade_delete => 0 },
);
sub change_name {
my ( $self, $new_name ) = @_;
my $event = $self->event( name_change =>
{ details => { new => $new_name, old => $self->name } } );
$self->last_name_change( $event );
$self->name( $new_name );
t/lib/MyApp/Schema/Result/Cd.pm view on Meta::CPAN
__PACKAGE__->set_primary_key('cdid');
__PACKAGE__->add_unique_constraint([qw( title artistid )]);
__PACKAGE__->belongs_to('artist' => 'MyApp::Schema::Result::Artist', 'artistid');
__PACKAGE__->has_many('tracks' => 'MyApp::Schema::Result::Track', 'cdid');
__PACKAGE__->has_many(
'cd_events' => ( 'MyApp::Schema::Result::CdEvent', 'cdid' ),
{ cascade_delete => 0 },
);
1;
t/lib/MyApp/Schema/Result/Track.pm view on Meta::CPAN
);
__PACKAGE__->set_primary_key('trackid');
__PACKAGE__->add_unique_constraint([qw( title cdid )]);
__PACKAGE__->belongs_to('cd' => 'MyApp::Schema::Result::Cd', 'cdid');
__PACKAGE__->has_many(
'events' => ( 'MyApp::Schema::Result::TrackEvent', 'trackid' ),
{ cascade_delete => 0 },
);
sub event_defaults {
my ($self, $event, $params) = @_;
my $title = $params->{details}->{title} || 'N/A';
return ( title => $title, $self->next::method(@_) );
}
1;
( run in 0.968 second using v1.01-cache-2.11-cpan-49f99fa48dc )