DBIx-Class-Events

 view release on metacpan or  search on metacpan

README  view on Meta::CPAN

 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".

README  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
    

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 )