Initial version, work-in-progress, funky FAQ
[dbsrgits/DBIx-Class.git] / lib / DBIx / Class / Manual / FAQ.pod
1 =head1 NAME
2
3 DBIx::Class::Manual::FAQ - Frequently Asked Questions (in theory)
4
5 =head1 DESCRIPTION
6
7 This document is intended as an anti-map of the documentation. If you
8 know what you want to do, but not how to do it in L<DBIx::Class>, then
9 look here. It does B<not> contain any code or examples, it just gives
10 explanations and pointers to the correct pieces of documentation to
11 read.
12
13 =head1 FAQs
14
15 How Do I:
16
17 =head2 Getting started
18
19 =over 4
20
21 =item .. create a database to use?
22
23 First, choose a database. For testing/experimenting, we reccommend
24 L<DBD::SQLite>, which is a self-contained small database. (i.e. all
25 you need to do is to install the DBD from CPAN, and it's usable).
26
27 Next, spend some time defining which data you need to store, and how
28 it relates to the other data you have. For some help on normalisation,
29 go to L<http://b62.tripod.com/doc/dbbase.htm> or
30 L<http://209.197.234.36/db/simple.html>.
31
32 Now, decide whether you want to have the database itself be the
33 definitive source of information about the data layout, or your
34 DBIx::Class schema. If it's the former, look up the documentation for
35 your database, eg. L<http://sqlite.org/lang_createtable.html>, on how
36 to create tables, and start creating them. For a nice universal
37 interface to your database, you can try L<DBI::Shell>. If you decided
38 on the latter choice, read the FAQ on setting up your classes
39 manually, and the one on creating tables from your schema.
40
41 =item .. use DBIx::Class with L<Catalyst>?
42
43 Install L<Catalyst::Model::DBIC::Schema> from CPAN. See it's
44 documentation, or below, for further details.
45
46 =item .. set up my DBIx::Class classes automatically from my database?
47
48 Install L<DBIx::Class::Schema::Loader> from CPAN, and read it's documentation. 
49
50 =item .. set up my DBIx::Class classes manually?
51
52 Look 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
56 Create your classes manually, as above. Write a script that calls
57 L<DBIx::Class::Schema/deploy>. See there for details, or the
58 L<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
68 There 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
72 This 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
76 Create 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
80 Just create a C<belongs_to> relationship, as above. If
81 the column is NULL then the inflation to the foreign object will not
82 happen. This has a side effect of not always fetching all the relevant
83 data, if you use a nullable foreign-key relationship in a JOIN, then
84 you 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
88 Instead of supplying a single column name, all relationship types also
89 allow you to supply a hashref containing the condition across which
90 the tables are to be joined. The condition may contain as many fields
91 as you like. See L<DBIx::Class::Relationship::Base>.
92
93 =item .. define a relatiopnship across an intermediate table? (many-to-many)
94
95 Read 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
99 By default, DBIx::Class cascades deletes and updates across
100 C<has_many> relationships. If your database already does this (and
101 probably better), turn it off by supplying C<< cascade_delete => 0 >> in
102 the relationship attributes. See L<DBIx::Class::Relationship::Base>.
103
104 =item .. use a relationship?
105
106 Use 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
128 Behind the scenes, DBIx::Class uses L<SQL::Abstract> to help construct
129 it's SQL searches. So if you fail to find help in the
130 L<DBIx::Class::Manual::Cookbook>, try looking in the SQL::Abstract
131 documentation.
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
141 See 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