... | ... |
@@ -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; |