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 create
153       these form you.  You should not need to do anything special if you use
154       the idiomatic approach to defining metadata as shown in the synopsis.
155

METHODS

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

AUTHOR

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

LICENSE

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