Commit | Line | Data |
81791ac3 |
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 |