| ... | ... |
@@ -1,6 +1,7 @@ |
| 1 |
+0.1651 |
|
| 2 |
+ - add experimental DBIx::Custom::Model filter attribute. |
|
| 1 | 3 |
0.1650 |
| 2 | 4 |
- add experimental DBIx::Custom::Model name() attribute |
| 3 |
- - remove name specified feature from experimantal include_model(). |
|
| 4 | 5 |
0.1649 |
| 5 | 6 |
- add experimental DBIx::Custom::Model column_clause() method. |
| 6 | 7 |
- select method column option can receive string. |
| ... | ... |
@@ -1,6 +1,6 @@ |
| 1 | 1 |
package DBIx::Custom; |
| 2 | 2 |
|
| 3 |
-our $VERSION = '0.1650'; |
|
| 3 |
+our $VERSION = '0.1651'; |
|
| 4 | 4 |
|
| 5 | 5 |
use 5.008001; |
| 6 | 6 |
use strict; |
| ... | ... |
@@ -771,6 +771,9 @@ sub include_model {
|
| 771 | 771 |
|
| 772 | 772 |
# Set |
| 773 | 773 |
$self->model($model->name, $model); |
| 774 |
+ |
|
| 775 |
+ # Apply filter |
|
| 776 |
+ $self->apply_filter($model->table, %{$model->filter});
|
|
| 774 | 777 |
} |
| 775 | 778 |
return $self; |
| 776 | 779 |
} |
| ... | ... |
@@ -1084,6 +1084,15 @@ You can set primary key to model. |
| 1084 | 1084 |
Primary key is used by C<update_at()>, C<delete_at()>, |
| 1085 | 1085 |
C<select_at()>. |
| 1086 | 1086 |
|
| 1087 |
+by C<filter> you can define filters applied by C<apply_filter()> |
|
| 1088 |
+ |
|
| 1089 |
+ $model->filter({
|
|
| 1090 |
+ title => {out => ..., in => ..., end => ...},
|
|
| 1091 |
+ author => {out => ..., in => ..., end => ...}
|
|
| 1092 |
+ }); |
|
| 1093 |
+ |
|
| 1094 |
+This filters is applied when C<include_model()> is called. |
|
| 1095 |
+ |
|
| 1087 | 1096 |
You can set column names |
| 1088 | 1097 |
|
| 1089 | 1098 |
$model->columns(['id', 'number_id']); |
| ... | ... |
@@ -1119,6 +1119,15 @@ L<DBIx::Custom>とL<DBI>のすべてのメソッドを呼び出すこともで |
| 1119 | 1119 |
ここで設定したプライマリーキーはC<update_at()>, C<delete_at()>, |
| 1120 | 1120 |
C<select_at()>で利用されます。 |
| 1121 | 1121 |
|
| 1122 |
+C<filter>でC<apply_filter()>で適用されるフィルタを定義しておくこともできます。 |
|
| 1123 |
+ |
|
| 1124 |
+ $model->filter({
|
|
| 1125 |
+ title => {out => ..., in => ..., end => ...},
|
|
| 1126 |
+ author => {out => ..., in => ..., end => ...}
|
|
| 1127 |
+ }); |
|
| 1128 |
+ |
|
| 1129 |
+このフィルタはC<include_model()>を呼び出したときに自動的に適用されます。 |
|
| 1130 |
+ |
|
| 1122 | 1131 |
モデルには列名を設定することもできます。 |
| 1123 | 1132 |
|
| 1124 | 1133 |
$model->columns(['id', 'number_id']); |
| ... | ... |
@@ -1134,6 +1143,7 @@ C<select_at()>で利用されます。 |
| 1134 | 1143 |
|
| 1135 | 1144 |
ここで設定したリレーションはC<select()>, C<select_at()>で利用されます。 |
| 1136 | 1145 |
|
| 1146 |
+ |
|
| 1137 | 1147 |
=head2 クラス名、モデル名、テーブル名 |
| 1138 | 1148 |
|
| 1139 | 1149 |
クラス名とモデル名とテーブル名の関係について書いておきます。 |
| ... | ... |
@@ -1146,6 +1156,8 @@ C<select_at()>で利用されます。 |
| 1146 | 1156 |
|
| 1147 | 1157 |
package MyModel::book; |
| 1148 | 1158 |
|
| 1159 |
+ use base 'MyModel'; |
|
| 1160 |
+ |
|
| 1149 | 1161 |
__PACAKGE__->attr(name => 'book_model'); |
| 1150 | 1162 |
|
| 1151 | 1163 |
クラス名 モデル名 テーブル名 |
| ... | ... |
@@ -1158,9 +1170,11 @@ C<select_at()>で利用されます。 |
| 1158 | 1170 |
テーブル名を変更することもできます。 |
| 1159 | 1171 |
|
| 1160 | 1172 |
package MyModel::book; |
| 1173 |
+ |
|
| 1174 |
+ use base 'MyModel'; |
|
| 1161 | 1175 |
|
| 1162 | 1176 |
__PACAKGE__->attr(table => 'book_table'); |
| 1163 |
- |
|
| 1177 |
+ |
|
| 1164 | 1178 |
クラス名 モデル名 テーブル名 |
| 1165 | 1179 |
book (クラス名) -> book book_table |
| 1166 | 1180 |
|
| ... | ... |
@@ -13,6 +13,7 @@ push @DBIx::Custom::CARP_NOT, __PACKAGE__; |
| 13 | 13 |
__PACKAGE__->attr( |
| 14 | 14 |
['dbi', 'name', 'table'], |
| 15 | 15 |
columns => sub { [] },
|
| 16 |
+ filter => sub { {} },
|
|
| 16 | 17 |
primary_key => sub { [] },
|
| 17 | 18 |
relation => sub { {} }
|
| 18 | 19 |
); |
| ... | ... |
@@ -157,7 +158,7 @@ my $table = DBIx::Custom::Model->new(table => 'books'); |
| 157 | 158 |
|
| 158 | 159 |
=head1 ATTRIBUTES |
| 159 | 160 |
|
| 160 |
-=head2 C<(experimental) columns> |
|
| 161 |
+=head2 C<columns> |
|
| 161 | 162 |
|
| 162 | 163 |
my $columns = $model->columns; |
| 163 | 164 |
$model = $model->columns(['id', 'number']); |
| ... | ... |
@@ -169,6 +170,13 @@ my $table = DBIx::Custom::Model->new(table => 'books'); |
| 169 | 170 |
|
| 170 | 171 |
L<DBIx::Custom> object. |
| 171 | 172 |
|
| 173 |
+=head2 C<filter> |
|
| 174 |
+ |
|
| 175 |
+ my $dbi = $model->filter |
|
| 176 |
+ $model = $model->filter({out => 'tp_to_date', in => 'date_to_tp'});
|
|
| 177 |
+ |
|
| 178 |
+This filter is applied when L<DBIx::Custom> C<include_model()> is called. |
|
| 179 |
+ |
|
| 172 | 180 |
=head2 C<name> |
| 173 | 181 |
|
| 174 | 182 |
my $name = $model->name; |
| ... | ... |
@@ -1591,6 +1591,10 @@ $result = $dbi->model('table1')->select(column => ['key3'], where => {'table1.ke
|
| 1591 | 1591 |
is($result->fetch_hash_first->{key3}, 3);
|
| 1592 | 1592 |
$result = $dbi->model('table1')->select_at(column => ['key3'], where => [1]);
|
| 1593 | 1593 |
is($result->fetch_hash_first->{key3}, 3);
|
| 1594 |
+$dbi->execute('create table table3 (key1);');
|
|
| 1595 |
+$dbi->model('table3')->insert(param => {key1 => 'a'});
|
|
| 1596 |
+is_deeply($dbi->model('table3')->select(where => {key1 => 'a'})->fetch_hash_first,
|
|
| 1597 |
+ {key1 => 'A'});
|
|
| 1594 | 1598 |
|
| 1595 | 1599 |
test 'column_clause'; |
| 1596 | 1600 |
$dbi = MyDBI7->connect($NEW_ARGS->{0});
|
| ... | ... |
@@ -0,0 +1,11 @@ |
| 1 |
+package MyModel6::table3; |
|
| 2 |
+ |
|
| 3 |
+use base 'MyModel6'; |
|
| 4 |
+ |
|
| 5 |
+__PACKAGE__->attr(filter => sub {
|
|
| 6 |
+ {
|
|
| 7 |
+ key1 => {in => sub { uc $_[0] }}
|
|
| 8 |
+ } |
|
| 9 |
+}); |
|
| 10 |
+ |
|
| 11 |
+1; |