Jorge

 view release on metacpan or  search on metacpan

lib/Jorge/DBEntity.pm  view on Meta::CPAN

        unless ( $fields{$_}->{class} ) {
            push @params, $self->{$_};
            next;
        }

        push @params, $self->{$_}->{ $self->{$_}->_pk->[0] };
    }

    return @params;
}

sub get_from_db {
    my $self = shift;
    my $id   = shift;

    return 0 unless $id;

    my @fields     = @{ $self->_fields->[0] };
    my %fields     = %{ $self->_fields->[1] };
    my $table_name = $self->_fields->[2];

    my @pk = grep { $fields{$_}->{pk} } keys %fields;

    my $query = 'SELECT ';
    $query .= join( ',', @fields );
    $query .= ' FROM ' . $table_name . ' WHERE ' . $pk[0] . ' = ' . $id;

    my $sth;
    unless ( $sth = $self->_db->execute($query) ) { return 0 }
    $self->_load( $sth->fetchrow_hashref );

    return $self->{ $pk[0] };
}

sub insert {
    my $self = shift;

    my @fields     = @{ $self->_fields->[0] };
    my %fields     = %{ $self->_fields->[1] };
    my $table_name = $self->_fields->[2];

    $self->before_insert();
    $self->before_save();

    my $query = 'INSERT INTO ' . $table_name;
    $query .= ' ('
      . join( ',',
        grep { !$fields{$_}->{pk} && !$fields{$_}->{timestamp} && $self->{$_} }
          @fields )
      . ')';
    $query .= ' VALUES (' . join( ',', map { '?' } $self->_params(1) ) . ')';
    if ( $self->_db->execute( $query, $self->_params(1) ) ) {
        $self->get_from_db( $self->_db->get_last_insert_id );
        return $self->{ $self->_pk->[0] };
    }
    else {
        return 0;
    }
}

sub update {
    my $self = shift;

    my @fields     = @{ $self->_fields->[0] };
    my %fields     = %{ $self->_fields->[1] };
    my $table_name = $self->_fields->[2];

    my @pk = grep { $fields{$_}->{pk} } keys %fields;

    $self->before_update();
    $self->before_save();

    my $query = 'UPDATE ' . $table_name;
    $query .= ' SET ';
    $query .= join( ',',
        map { $_ . ' = ?' }
          grep { !$fields{$_}->{pk} && !$fields{$_}->{timestamp} } @fields );
    $query .= ' WHERE ' . $pk[0] . ' = ?';
    if ( $self->_db->execute( $query, $self->_params, $self->{ $pk[0] } ) ) {
        return $self->{ $pk[0] };
    }
    else {
        return 0;
    }
}

sub delete {
    my $self = shift;

    my @fields     = @{ $self->_fields->[0] };
    my %fields     = %{ $self->_fields->[1] };
    my $table_name = $self->_fields->[2];

    my @pk = grep { $fields{$_}->{pk} } keys %fields;

    $self->before_delete();

    my $query = 'DELETE FROM ' . $table_name;
    $query .= ' WHERE ' . $pk[0] . ' = ?';
    if ( $self->_db->execute( $query, $self->{ $pk[0] } ) ) {
        return 1;
    }
    else {
        return 0;
    }
}

sub get_by {
    my ( $self, @params ) = @_;

    return 0 unless @params;

    my $table_name = $self->_fields->[2];
    my %fields     = %{ $self->_fields->[1] };

    my @cols;
    my @vals;

    foreach my $col (@params) {
        push( @cols, "$col = ?" );
        my $v;



( run in 0.909 second using v1.01-cache-2.11-cpan-d06a3f9ecfd )