Initial version, work-in-progress, funky FAQ
[dbsrgits/DBIx-Class-Historic.git] / lib / DBIx / Class / Manual / FAQ.pod
CommitLineData
81791ac3 1=head1 NAME
2
3DBIx::Class::Manual::FAQ - Frequently Asked Questions (in theory)
4
5=head1 DESCRIPTION
6
7This document is intended as an anti-map of the documentation. If you
8know what you want to do, but not how to do it in L<DBIx::Class>, then
9look here. It does B<not> contain any code or examples, it just gives
10explanations and pointers to the correct pieces of documentation to
11read.
12
13=head1 FAQs
14
15How Do I:
16
17=head2 Getting started
18
19=over 4
20
21=item .. create a database to use?
22
23First, choose a database. For testing/experimenting, we reccommend
24L<DBD::SQLite>, which is a self-contained small database. (i.e. all
25you need to do is to install the DBD from CPAN, and it's usable).
26
27Next, spend some time defining which data you need to store, and how
28it relates to the other data you have. For some help on normalisation,
29go to L<http://b62.tripod.com/doc/dbbase.htm> or
30L<http://209.197.234.36/db/simple.html>.
31
32Now, decide whether you want to have the database itself be the
33definitive source of information about the data layout, or your
34DBIx::Class schema. If it's the former, look up the documentation for
35your database, eg. L<http://sqlite.org/lang_createtable.html>, on how
36to create tables, and start creating them. For a nice universal
37interface to your database, you can try L<DBI::Shell>. If you decided
38on the latter choice, read the FAQ on setting up your classes
39manually, and the one on creating tables from your schema.
40
41=item .. use DBIx::Class with L<Catalyst>?
42
43Install L<Catalyst::Model::DBIC::Schema> from CPAN. See it's
44documentation, or below, for further details.
45
46=item .. set up my DBIx::Class classes automatically from my database?
47
48Install L<DBIx::Class::Schema::Loader> from CPAN, and read it's documentation.
49
50=item .. set up my DBIx::Class classes manually?
51
52Look at the L<DBIx::Class::Manual::Example>, come back here if you get lost.
53
54=item .. create my database tables from my DBIx::Class schema?
55
56Create your classes manually, as above. Write a script that calls
57L<DBIx::Class::Schema/deploy>. See there for details, or the
58L<DBIx::Class::Manual::Cookbook>.
59
60=back
61
62=head2 Relationships
63
64=over 4
65
66=item .. tell DBIx::Class about relationships between my tables?
67
68There are a vareity of relationship types that come pre-defined for you to use. These are all listed in L<DBIx::Class::Relationship>. If you need a non-standard type, or more information, look in L<DBIx::Class::Relationship::Base>.
69
70=item .. define a one-to-many relationship?
71
72This is called a C<has_many> relationship on the one side, and a C<belongs_to> relationship on the many side. Currently these need to be set up individually on each side. See L<DBIx::Class::Relationship> for details.
73
74=item .. define a relationship where this table contains another table's primary key? (foreign key)
75
76Create a C<belongs_to> relationship for the field containing the foreign key. L<DBIx::Class::Relationship/belongs_to>.
77
78=item .. define a foreign key relationship where the key field may contain NULL?
79
80Just create a C<belongs_to> relationship, as above. If
81the column is NULL then the inflation to the foreign object will not
82happen. This has a side effect of not always fetching all the relevant
83data, if you use a nullable foreign-key relationship in a JOIN, then
84you probably want to set the join_type to 'left'.
85
86=item .. define a relationship where the key consists of more than one column?
87
88Instead of supplying a single column name, all relationship types also
89allow you to supply a hashref containing the condition across which
90the tables are to be joined. The condition may contain as many fields
91as you like. See L<DBIx::Class::Relationship::Base>.
92
93=item .. define a relatiopnship across an intermediate table? (many-to-many)
94
95Read the documentation on L<DBIx::Class::Relationship/many_to_many>.
96
97=item .. stop DBIx::Class from attempting to cascade deletes on my has_many relationships?
98
99By default, DBIx::Class cascades deletes and updates across
100C<has_many> relationships. If your database already does this (and
101probably better), turn it off by supplying C<< cascade_delete => 0 >> in
102the relationship attributes. See L<DBIx::Class::Relationship::Base>.
103
104=item .. use a relationship?
105
106Use it's name. An accessor is created using the name. See examples in L<DBIx::Class::Manual::Cookbook/Using relationships>.
107
108=back
109
110=head2 Searching
111
112=over 4
113
114=item .. search for data?
115
116=item .. search using database functions?
117
118=item .. sort the results of my search?
119
120=item .. group the results of my search?
121
122=item .. filter the results of my search?
123
124=item .. search in several tables simultaneously?
125
126=item .. find more help on constructing searches?
127
128Behind the scenes, DBIx::Class uses L<SQL::Abstract> to help construct
129it's SQL searches. So if you fail to find help in the
130L<DBIx::Class::Manual::Cookbook>, try looking in the SQL::Abstract
131documentation.
132
133=back
134
135=head2 Fetching data
136
137=over 4
138
139=item .. fetch as much data as possible in as few select calls as possible? (prefetch)
140
141See the prefetch examples in the L<DBIx::Class::Manual::Cookbook|"Cookbook">.
142
143=back
144
145=over 4
146
147=head2 Inserting and updating data
148
149=over 4
150
151=item .. insert many rows of data efficiently?
152
153=item .. update a collection of rows at the same time?
154
155=item .. use database functions when updating rows?
156
157=item .. update a column using data from another column?
158
159=back
160
161=head2 Misc
162
163=over 4
164
165=item How do I store my own (non-db) data in my DBIx::Class objects?
166
167=item How do I use DBIx::Class objects my TT templates?
168
169=item See the SQL statements my code is producing?
170
171=item Why didn't my search run any SQL?
172
173
174=back