Cleaned up reference to DBIx::Class::Manual::FAQ which no longer exists
[dbsrgits/DBIx-Class.git] / lib / DBIx / Class / Manual / Component.pod
CommitLineData
3d18a9c1 1
2=head1 NAME
3
d444f9fa 4DBIx::Class::Manual::Component - Existing components and how to develop new ones.
3d18a9c1 5
6=head1 USING
7
8Components are loaded using the load_components() method within your
9DBIx::Class classes.
10
11 package My::Thing;
12 use base qw( DBIx::Class );
13 __PACKAGE__->load_components(qw( PK::Auto Core ));
14
15Generally you do not want to specify the full package name
16of a component, instead take off the DBIx::Class:: part of
17it and just include the rest. If you do want to load a
18component outside of the normal namespace you can do so
19by prepending the component name with a +.
20
21 __PACKAGE__->load_components(qw( +My::Component ));
22
23Once a component is loaded all of it's methods, or otherwise,
24that it provides will be available in your class.
25
26The order in which is you load the components may be
d444f9fa 27very important, depending on the component. The general
3d18a9c1 28rule of thumb is to first load extra components and then
29load core ones last. If you are not sure, then read the
30docs for the components you are using and see if they
31mention anything about the order in which you should load
32them.
33
d444f9fa 34=head1 EXISTING COMPONENTS
3d18a9c1 35
36=head2 Extra
37
d444f9fa 38These components provide extra functionality beyond
39basic functionality that you can't live without.
3d18a9c1 40
880a1a0c 41L<DBIx::Class::CDBICompat> - Class::DBI Compatibility layer.
3d18a9c1 42
3d18a9c1 43L<DBIx::Class::FormTools> - Build forms with multiple interconnected objects.
44
45L<DBIx::Class::HTMLWidget> - Like FromForm but with DBIx::Class and HTML::Widget.
46
d444f9fa 47L<DBIx::Class::PK::Auto> - Retrieve automatically created primary keys upon insert.
48
3d18a9c1 49L<DBIx::Class::QueriesTime> - Display the amount of time it takes to run queries.
50
51L<DBIx::Class::RandomStringColumns> - Declare virtual columns that return random strings.
52
53L<DBIx::Class::UTF8Columns> - Force UTF8 (Unicode) flag on columns.
54
55L<DBIx::Class::UUIDColumns> - Implicit UUID columns.
56
57L<DBIx::Class::WebForm> - CRUD methods.
58
59=head2 Experimental
60
61These components are under development, there interfaces may
62change, they may not work, etc. So, use them if you want, but
63be warned.
64
65L<DBIx::Class::Serialize> - Hooks for Storable freeze/thaw.
66
67L<DBIx::Class::Serialize::Storable> - Hooks for Storable freeze/thaw.
68
69L<DBIx::Class::Validation> - Validate all data before submitting to your database.
70
71=head2 Core
72
73These are the components that all, or nearly all, people will use
74without even knowing it. These components provide most of
75DBIx::Class' functionality.
76
d444f9fa 77L<DBIx::Class::AccessorGroup> - Lets you build groups of accessors.
78
3d18a9c1 79L<DBIx::Class::Core> - Loads various components that "most people" would want.
80
81L<DBIx::Class::DB> - Non-recommended classdata schema component.
82
83L<DBIx::Class::InflateColumn> - Automatically create objects from column data.
84
3d18a9c1 85L<DBIx::Class::PK> - This class contains methods for handling primary keys and methods depending on them.
86
d444f9fa 87L<DBIx::Class::Relationship> - Inter-table relationships.
3d18a9c1 88
89L<DBIx::Class::ResultSourceProxy::Table> - Provides a classdata table object and method proxies.
90
d444f9fa 91L<DBIx::Class::Row> - Basic row methods.
3d18a9c1 92
d444f9fa 93=head1 CREATEING COMPONENTS
3d18a9c1 94
95Making your own component is very easy.
96
97 package DBIx::Class::MyComp;
98 use base qw(DBIx::Class);
99 # Create methods, accessors, load other components, etc.
100 1;
101
102When a component is loaded it is included in the calling
d444f9fa 103class' inheritance chain using L<Class::C3>. As well as
3d18a9c1 104providing custom utility methods, a component may also
105override methods provided by other core components, like
106L<DBIx::Class::Row> and others. For example, you
107could override the insert and delete methods.
108
109 sub insert {
110 my $self = shift;
111 # Do stuff with $self, like set default values.
112 return $self->nest::method( @_ );
113 }
114
115 sub delete {
116 my $self = shift;
117 # Do stuff with $self.
118 return $self->nest::method( @_ );
119 }
120
121Now, the order that a component is loaded is very important. Components
122that are loaded first are the first ones in the inheritance stack. So, if
123you override insert() but the DBIx::Class::Row component is loaded first
124then your insert() will never be called, since the DBIx::Class::Row insert()
125will be called first. If you are unsure as to why a given method is not
126being called try printing out the Class::C3 inheritance stack.
127
128 print join ', ' => Class::C3::calculateMRO('YourClass::Name');
129
880a1a0c 130Check out the L<Class::C3> docs for more information about inheritance.
3d18a9c1 131
132=head1 SEE ALSO
133
134L<DBIx::Class::Manual::Cookbook>
135
3d18a9c1 136=head1 AUTHOR
137
138Aran Clary Deltac <bluefeet@cpan.org>
139