1Rose::DB::Object::Std(3U)ser Contributed Perl DocumentatiRoonse::DB::Object::Std(3)
2
3
4

NAME

6       Rose::DB::Object::Std - Standardized object representation of a single
7       row in a database table.
8

SYNOPSIS

10         package Category;
11
12         use base 'Rose::DB::Object::Std';
13
14         __PACKAGE__->meta->setup
15         (
16           table => 'categories',
17
18           columns =>
19           [
20             id          => { type => 'int', primary_key => 1 },
21             name        => { type => 'varchar', length => 255 },
22             description => { type => 'text' },
23           ],
24
25           unique_key => 'name',
26         );
27
28         ...
29
30         package Product;
31
32         use base 'Rose::DB::Object::Std';
33
34         __PACKAGE__->meta->setup
35         (
36           table => 'products',
37
38           columns =>
39           [
40             id          => { type => 'int', primary_key => 1 },
41             name        => { type => 'varchar', length => 255 },
42             description => { type => 'text' },
43             category_id => { type => 'int' },
44
45             status =>
46             {
47               type      => 'varchar',
48               check_in  => [ 'active', 'inactive' ],
49               default   => 'inactive',
50             },
51
52             start_date  => { type => 'datetime' },
53             end_date    => { type => 'datetime' },
54
55             date_created     => { type => 'timestamp', default => 'now' },
56             last_modified    => { type => 'timestamp', default => 'now' },
57           ],
58
59           unique_key => 'name',
60
61           foreign_keys =>
62           [
63             category =>
64             {
65               class       => 'Category',
66               key_columns => { category_id => 'id' },
67             },
68           ],
69         );
70
71         ...
72
73         $product = Product->new(name        => 'GameCube',
74                                 status      => 'active',
75                                 start_date  => '11/5/2001',
76                                 end_date    => '12/1/2007',
77                                 category_id => 5);
78
79         $product->save or die $product->error;
80
81         $id = $product->id; # auto-generated on save
82
83         ...
84
85         $product = Product->new(id => $id);
86         $product->load or die $product->error;
87
88         print $product->category->name;
89
90         $product->end_date->add(days => 45);
91
92         $product->save or die $product->error;
93
94         ...
95

DESCRIPTION

97       Rose::DB::Object::Std is a subclass of Rose::DB::Object that imposes a
98       few more constraints on the tables it fronts.  In addition to the
99       constraints described in the Rose::DB::Object documentation, tables
100       fronted by Rose::DB::Object::Std objects must also fulfill the
101       following requirements:
102
103       •   The table must have a single primary key column named "id"
104
105       •   The value of the "id" column must be auto-generated if absent.
106
107       Different databases provide for auto-generated column values in
108       different ways.  Some provide a native "auto-increment" or "serial"
109       data type, others use sequences behind the scenes.
110
111       Rose::DB::Object::Std (in cooperation with Rose::DB and
112       Rose::DB::Object::Std::Metadata) attempts to hide these details from
113       you.  All you have to do is omit the value for the primary key
114       entirely.  After the object is "save()"ed, you can retrieve the auto-
115       selected primary key by calling the "id()" method.
116
117       You do have to correctly define the "id" column in the database,
118       however.  Here are examples of primary key column definitions that
119       provide auto-generated values, one for each of the databases supported
120       by Rose::DB.
121
122       •   PostgreSQL
123
124               CREATE TABLE mytable
125               (
126                 id   SERIAL NOT NULL PRIMARY KEY,
127                 ...
128               );
129
130       •   MySQL
131
132               CREATE TABLE mytable
133               (
134                 id   INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
135                 ...
136               );
137
138       •   Informix
139
140               CREATE TABLE mytable
141               (
142                 id   SERIAL NOT NULL PRIMARY KEY,
143                 ...
144               );
145
146       Other data definitions are possible, of course, but the three
147       definitions above are used in the Rose::DB::Object::Std test suite and
148       are therefore guaranteed to work.  If you have success with alternative
149       approaches, patches and/or new tests are welcome.
150
151       To achieve much of this functionality, Rose::DB::Object::Std uses
152       Rose::DB::Object::Std::Metadata objects.  The "meta()" method will
153       create these form you.  You should not need to do anything special if
154       you use the idiomatic approach to defining metadata as shown in the
155       synopsis.
156

METHODS

158       Only the methods that are overridden are documented here.  See the
159       Rose::DB::Object documentation for the rest.
160
161       meta
162           Returns the Rose::DB::Object::Std::Metadata object associated with
163           this class.  This object describes the database table whose rows
164           are fronted by this class: the name of the table, its columns,
165           unique keys, foreign keys, etc.  See the
166           Rose::DB::Object::Std::Metadata documentation for more information.
167
168           This can be used as both a class method and an object method.
169

AUTHOR

171       John C. Siracusa (siracusa@gmail.com)
172

LICENSE

174       Copyright (c) 2010 by John C. Siracusa.  All rights reserved.  This
175       program is free software; you can redistribute it and/or modify it
176       under the same terms as Perl itself.
177
178
179
180perl v5.32.1                      2021-01-27          Rose::DB::Object::Std(3)
Impressum