| ... | ... |
@@ -1079,6 +1079,13 @@ C<delete()>, C<delete_all()>, C<select()>などのメソッドを |
| 1079 | 1079 |
|
| 1080 | 1080 |
$dbi->model('book')->insert(param => $param);
|
| 1081 | 1081 |
|
| 1082 |
+またモデルクラスでC<primary_key>の設定がなされていれば、 |
|
| 1083 |
+プライマリキーを指定することなしに |
|
| 1084 |
+C<update_at()>, C<delete_at()>, C<select_at()>のメソッドを |
|
| 1085 |
+利用できます。 |
|
| 1086 |
+ |
|
| 1087 |
+ $dbi->model('book')->delete_at(where => 123);
|
|
| 1088 |
+ |
|
| 1082 | 1089 |
モデルはL<DBIx::Custom::Model>です。 |
| 1083 | 1090 |
|
| 1084 | 1091 |
必要であれば、C<table()>でテーブル名を取得することができます。 |
| ... | ... |
@@ -51,20 +51,41 @@ sub method {
|
| 51 | 51 |
return $self; |
| 52 | 52 |
} |
| 53 | 53 |
|
| 54 |
-sub new {
|
|
| 55 |
- my $self = shift->SUPER::new(@_); |
|
| 54 |
+sub insert { my $self = shift; $self->dbi->insert(table => $self->table, @_) }
|
|
| 55 |
+sub update { my $self = shift; $self->dbi->update(table => $self->table, @_) }
|
|
| 56 |
+sub update_all { my $self = shift; $self->dbi->update_all(table => $self->table, @_) }
|
|
| 57 |
+sub delete { my $self = shift; $self->dbi->delete(table => $self->table, @_) }
|
|
| 58 |
+sub delete_all { my $self = shift; $self->dbi->delete_all(table => $self->table, @_) }
|
|
| 59 |
+sub select { my $self = shift; $self->dbi->select(table => $self->table, @_) }
|
|
| 60 |
+ |
|
| 61 |
+sub update_at {
|
|
| 62 |
+ my $self = shift; |
|
| 56 | 63 |
|
| 57 |
- # Methods |
|
| 58 |
- my @methods = qw/insert update update_all delete delete_all select/; |
|
| 59 |
- foreach my $method (@methods) {
|
|
| 60 |
- $self->method( |
|
| 61 |
- $method => sub {
|
|
| 62 |
- my $self = shift; |
|
| 63 |
- return $self->dbi->$method(table => $self->table, @_); |
|
| 64 |
- } |
|
| 65 |
- ); |
|
| 66 |
- } |
|
| 64 |
+ return $self->dbi->update_at( |
|
| 65 |
+ table => $self->table, |
|
| 66 |
+ primary_key => $self->primary_key, |
|
| 67 |
+ @_ |
|
| 68 |
+ ); |
|
| 69 |
+} |
|
| 70 |
+ |
|
| 71 |
+sub delete_at {
|
|
| 72 |
+ my $self = shift; |
|
| 67 | 73 |
|
| 74 |
+ return $self->dbi->delete_at( |
|
| 75 |
+ table => $self->table, |
|
| 76 |
+ primary_key => $self->primary_key, |
|
| 77 |
+ @_ |
|
| 78 |
+ ); |
|
| 79 |
+} |
|
| 80 |
+ |
|
| 81 |
+sub select_at {
|
|
| 82 |
+ my $self = shift; |
|
| 83 |
+ |
|
| 84 |
+ return $self->dbi->select_at( |
|
| 85 |
+ table => $self->table, |
|
| 86 |
+ primary_key => $self->primary_key, |
|
| 87 |
+ @_ |
|
| 88 |
+ ); |
|
| 68 | 89 |
return $self; |
| 69 | 90 |
} |
| 70 | 91 |
|
| ... | ... |
@@ -1506,3 +1506,49 @@ $dbi = MyDBI1->connect($NEW_ARGS->{0});
|
| 1506 | 1506 |
$model = $dbi->model('book');
|
| 1507 | 1507 |
$model->relation({'book.id' => 'company.id'});
|
| 1508 | 1508 |
is_deeply($model->relation, {'book.id' => 'company.id'});
|
| 1509 |
+ |
|
| 1510 |
+ |
|
| 1511 |
+test 'model delete_at'; |
|
| 1512 |
+{
|
|
| 1513 |
+ package MyDBI6; |
|
| 1514 |
+ |
|
| 1515 |
+ use base 'DBIx::Custom'; |
|
| 1516 |
+ |
|
| 1517 |
+ sub connect {
|
|
| 1518 |
+ my $self = shift->SUPER::connect(@_); |
|
| 1519 |
+ |
|
| 1520 |
+ $self->include_model('MyModel5');
|
|
| 1521 |
+ |
|
| 1522 |
+ return $self; |
|
| 1523 |
+ } |
|
| 1524 |
+} |
|
| 1525 |
+$dbi = MyDBI6->connect($NEW_ARGS->{0});
|
|
| 1526 |
+$dbi->execute($CREATE_TABLE->{1});
|
|
| 1527 |
+$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2, key3 => 3});
|
|
| 1528 |
+$dbi->model('table1')->delete_at(where => [1, 2]);
|
|
| 1529 |
+is_deeply($dbi->select(table => 'table1')->fetch_hash_all, []); |
|
| 1530 |
+ |
|
| 1531 |
+ |
|
| 1532 |
+test 'update_at'; |
|
| 1533 |
+$dbi = MyDBI6->connect($NEW_ARGS->{0});
|
|
| 1534 |
+$dbi->execute($CREATE_TABLE->{1});
|
|
| 1535 |
+$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2, key3 => 3});
|
|
| 1536 |
+$dbi->model('table1')->update_at(
|
|
| 1537 |
+ where => [1, 2], |
|
| 1538 |
+ param => {key3 => 4}
|
|
| 1539 |
+); |
|
| 1540 |
+$result = $dbi->model('table1')->select;
|
|
| 1541 |
+$row = $result->fetch_hash_first; |
|
| 1542 |
+is($row->{key1}, 1);
|
|
| 1543 |
+is($row->{key2}, 2);
|
|
| 1544 |
+is($row->{key3}, 4);
|
|
| 1545 |
+ |
|
| 1546 |
+test 'select_at'; |
|
| 1547 |
+$dbi = MyDBI6->connect($NEW_ARGS->{0});
|
|
| 1548 |
+$dbi->execute($CREATE_TABLE->{1});
|
|
| 1549 |
+$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2, key3 => 3});
|
|
| 1550 |
+$result = $dbi->model('table1')->select_at(where => [1, 2]);
|
|
| 1551 |
+$row = $result->fetch_hash_first; |
|
| 1552 |
+is($row->{key1}, 1);
|
|
| 1553 |
+is($row->{key2}, 2);
|
|
| 1554 |
+is($row->{key3}, 3);
|
| ... | ... |
@@ -0,0 +1,5 @@ |
| 1 |
+package MyModel5; |
|
| 2 |
+ |
|
| 3 |
+use base 'DBIx::Custom::Model'; |
|
| 4 |
+ |
|
| 5 |
+1; |
| ... | ... |
@@ -0,0 +1,10 @@ |
| 1 |
+package MyModel5::table1; |
|
| 2 |
+ |
|
| 3 |
+use strict; |
|
| 4 |
+use warnings; |
|
| 5 |
+ |
|
| 6 |
+use base 'MyModel5'; |
|
| 7 |
+ |
|
| 8 |
+__PACKAGE__->attr('primary_key' => sub { ['key1', 'key2'] });
|
|
| 9 |
+ |
|
| 10 |
+1; |