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 )