нашел DBIx::Class, если ли недостатки у ORM? мне сначала не понравилось ORM....
вот пример, плохо выглядит
Код: Выделить всё
if ('moderator') {
push @sql, 'AND bla = ?'
push @sqlp. 'bla'
}
if ('moderator') {
push @sql, 'AND bla = ?'
push @sqlp. 'bla'
}
if ('moderator') {
push @sql, 'AND bla = ?'
push @sqlp. 'bla'
}
$sql = join ('', @sql);
my $sth = $self->{dbh}->prepare(
"SELECT t1.username,
t1.name,
t1.quota,
t1.domain
FROM mailbox AS t1,
domain AS t2
WHERE t1.domain = ?
AND t1.username = ?
$sql
AND t1.domain = t2.domain
LIMIT 1
"
);
$sth->execute(@sqlp);Код:
if ($ps->{type_content_privat} eq 'on') {
$ps->{type_content_privat} = '1';
} else {
$ps->{type_content_privat} = '0';
}
my $section;
if ($ps->{type_content_privat} eq 'on') {
$ps->{type_content_privat} = '1';
$ps->{section_child} = $c->user->{user}->{id};
} else {
if (defined ($ps->{section_child})) {
my $dbh = $c->model('DBI')->dbh;
my $sth = $dbh->prepare("SELECT id_se
FROM section
WHERE id_se = ?
LIMIT 1");
$sth->execute($ps->{section_child});
$section = $sth->fetchrow_hashref();
$sth->finish();
$type_section_privat = 0;
}
}
my $error_se;
unless ($ps->{name_content}
|| $ps->{name_hiden_content}
|| $ps->{content_keys}
|| $ps->{content_text} ) {
$error_se = 1;
}
# If the username and password values were found in form
if ($error_se != 1 && $section->{id_se}) {
# exit;
# $c->stash->{error_msg} = "Bad username or password2.";
# $c->forward('add_section');
# return;
my $sql;
my @sql;
if ( $ps->{submit} && $ps->{submit} eq 'Add content' ) {
$sql = '
INSERT INTO content ( id_un,
id_se,
name_co,
heading_name_co,
keys_co,
text_co,
active_co,
hiden_co,
hiden_g_co,
close_co,
voting_co,
vo_all_co,
vo_balls_co,
vo_per,
created )
VALUES (?,
?,
?,
?,
?,
?,
?,
?,
?,
?,
?,
?,
?,
?,
?)
';
push @sql,
$c->user->{user}->{id},
$ps->{section_child},
$ps->{name_content},
$ps->{name_hiden_content},
$ps->{content_keys},
$ps->{content_text},
'0',
$ps->{type_hiden_content},
'0',
'0',
$ps->{type_voting_content},
'1',
'1',
'1',
time;
}
if ( $ps->{submit} && $ps->{submit} eq 'Edit content' ) {
my $sql = 'UPDATE content
SET
id_se = ?,
name_co = ?,
heading_name_co,
keys_co,
text_co,
active_co,
hiden_co,
hiden_g_co,
close_co,
voting_co,
vo_all_co,
vo_balls_co,
WHERE id = ?
" );
push @sql,
$self->{p}->{fPassword},
$self->{p}->{fCreateddomain},
$self->{p}->{id}->{id}
);
}
вот так красивей:
Код:
package AddressBook::Controller::Address;
use strict;
use warnings;
use base qw(Catalyst::Controller::FormBuilder Catalyst::Controller::
BindLex');
sub add : Local Form('/address/edit') {
my ($self, $c, $person_id) = @_;
$c->stash->{template} = 'address/edit.tt2';
$c->forward('edit', [undef, $person_id]);
}
sub edit : Local Form {
my ($self, $c, $address_id, $person_id) = @_;
my $address : Stashed;
if(!$address_id && $person_id){
# we're adding a new address to $person
# check that person exists
my $person = $c->model('AddressDB::People')->
find({id => $person_id});
if(!$person){
$c->stash->{error} = 'No such person!';
$c->detach('/person/list');
}
# create the new address
$address = $c->model('AddressDB::Addresses')->
new({person => $person});
}
else {
$address = $c->model('AddressDB::Addresses')->
find({id => $address_id});
if(!$address){
$c->stash->{error} = 'No such address!';
$c->detach('/person/list');
}
}
if ($c->form->submitted && $c->form->validate){
# transfer data from form to database
$address->location($c->form->field('location'));
$address->postal ($c->form->field('postal' ));
$address->phone ($c->form->field('phone' ));
$address->email ($c->form->field('email' ));
$address->insert_or_update;
$c->stash->{message} =
($address_id > 0 ? 'Updated ' : 'Added new ').
'address for '. $address->person->name;
$c->detach('/person/list');
}
else {
# transfer data from database to form
if(!$address_id){
$c->stash->{message} = 'Adding a new address ';
}
else {
$c->stash->{message} = 'Updating an address ';
}
$c->stash->{message} .= ' for '. $address->person->name;
$c->form->field(name => 'location',
value => $address->location);
$c->form->field(name => 'postal',
value => $address->postal);
$c->form->field(name => 'phone',
value => $address->phone);
$c->form->field(name => 'email',
value => $address->email);
}
}
sub delete : Local {
my ($self, $c, $address_id) = @_;
my $address = $c->model('AddressDB::Addresses')->
find({id => $address_id});
if($address){
# "Deleted First Last's Home address"
$c->stash->{message} =
'Deleted ' . $address->person->name. q{'s }.
$address->location. ' address';
$address->delete;
}
else {
$c->stash->{error} = 'No such address';
}
$c->forward('/person/list');
}
1;
короче, как правильно работать c DBI, когда много гемороя?
есть ли недостатки у ORM?