1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
# MyApp/Schema.pm
package MyApp::Schema;
use base qw(DBIx::Class::Schema);
__PACKAGE__->load_namespaces;
1;
# MyApp/Schema/Result/User.pm
package MyApp::Schema::Result::User;
use base qw(DBIx::Class::Core);
__PACKAGE__->table('users');
__PACKAGE__->add_columns(
id => {
data_type => 'integer',
is_auto_increment => 1,
},
name => {
data_type => 'varchar',
size => 100,
is_nullable => 0,
},
email => {
data_type => 'varchar',
size => 255,
is_nullable => 0,
},
created_at => {
data_type => 'datetime',
default_value => \'CURRENT_TIMESTAMP',
},
);
__PACKAGE__->set_primary_key('id');
__PACKAGE__->add_unique_constraint(email_unique => ['email']);
# リレーションシップの定義(後で使用)
__PACKAGE__->has_many(
posts => 'MyApp::Schema::Result::Post',
'user_id'
);
1;
# MyApp/Schema/Result/Post.pm
package MyApp::Schema::Result::Post;
use base qw(DBIx::Class::Core);
__PACKAGE__->table('posts');
__PACKAGE__->add_columns(
id => {
data_type => 'integer',
is_auto_increment => 1,
},
user_id => {
data_type => 'integer',
is_foreign_key => 1,
},
title => {
data_type => 'varchar',
size => 200,
is_nullable => 0,
},
body => {
data_type => 'text',
is_nullable => 1,
},
created_at => {
data_type => 'datetime',
default_value => \'CURRENT_TIMESTAMP',
},
);
__PACKAGE__->set_primary_key('id');
__PACKAGE__->belongs_to(
user => 'MyApp::Schema::Result::User',
'user_id'
);
1;
|