From: Jess Robinson Date: Thu, 6 Jul 2006 13:12:02 +0000 (+0000) Subject: Initial version, work-in-progress, funky FAQ X-Git-Tag: v0.07002~75^2~56 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=81791ac391d1bcdb0de614f5317ab9966d806488;p=dbsrgits%2FDBIx-Class.git Initial version, work-in-progress, funky FAQ --- diff --git a/lib/DBIx/Class/Manual/FAQ.pod b/lib/DBIx/Class/Manual/FAQ.pod new file mode 100644 index 0000000..d7ff6cc --- /dev/null +++ b/lib/DBIx/Class/Manual/FAQ.pod @@ -0,0 +1,174 @@ +=head1 NAME + +DBIx::Class::Manual::FAQ - Frequently Asked Questions (in theory) + +=head1 DESCRIPTION + +This document is intended as an anti-map of the documentation. If you +know what you want to do, but not how to do it in L, then +look here. It does B contain any code or examples, it just gives +explanations and pointers to the correct pieces of documentation to +read. + +=head1 FAQs + +How Do I: + +=head2 Getting started + +=over 4 + +=item .. create a database to use? + +First, choose a database. For testing/experimenting, we reccommend +L, which is a self-contained small database. (i.e. all +you need to do is to install the DBD from CPAN, and it's usable). + +Next, spend some time defining which data you need to store, and how +it relates to the other data you have. For some help on normalisation, +go to L or +L. + +Now, decide whether you want to have the database itself be the +definitive source of information about the data layout, or your +DBIx::Class schema. If it's the former, look up the documentation for +your database, eg. L, on how +to create tables, and start creating them. For a nice universal +interface to your database, you can try L. If you decided +on the latter choice, read the FAQ on setting up your classes +manually, and the one on creating tables from your schema. + +=item .. use DBIx::Class with L? + +Install L from CPAN. See it's +documentation, or below, for further details. + +=item .. set up my DBIx::Class classes automatically from my database? + +Install L from CPAN, and read it's documentation. + +=item .. set up my DBIx::Class classes manually? + +Look at the L, come back here if you get lost. + +=item .. create my database tables from my DBIx::Class schema? + +Create your classes manually, as above. Write a script that calls +L. See there for details, or the +L. + +=back + +=head2 Relationships + +=over 4 + +=item .. tell DBIx::Class about relationships between my tables? + +There are a vareity of relationship types that come pre-defined for you to use. These are all listed in L. If you need a non-standard type, or more information, look in L. + +=item .. define a one-to-many relationship? + +This is called a C relationship on the one side, and a C relationship on the many side. Currently these need to be set up individually on each side. See L for details. + +=item .. define a relationship where this table contains another table's primary key? (foreign key) + +Create a C relationship for the field containing the foreign key. L. + +=item .. define a foreign key relationship where the key field may contain NULL? + +Just create a C relationship, as above. If +the column is NULL then the inflation to the foreign object will not +happen. This has a side effect of not always fetching all the relevant +data, if you use a nullable foreign-key relationship in a JOIN, then +you probably want to set the join_type to 'left'. + +=item .. define a relationship where the key consists of more than one column? + +Instead of supplying a single column name, all relationship types also +allow you to supply a hashref containing the condition across which +the tables are to be joined. The condition may contain as many fields +as you like. See L. + +=item .. define a relatiopnship across an intermediate table? (many-to-many) + +Read the documentation on L. + +=item .. stop DBIx::Class from attempting to cascade deletes on my has_many relationships? + +By default, DBIx::Class cascades deletes and updates across +C relationships. If your database already does this (and +probably better), turn it off by supplying C<< cascade_delete => 0 >> in +the relationship attributes. See L. + +=item .. use a relationship? + +Use it's name. An accessor is created using the name. See examples in L. + +=back + +=head2 Searching + +=over 4 + +=item .. search for data? + +=item .. search using database functions? + +=item .. sort the results of my search? + +=item .. group the results of my search? + +=item .. filter the results of my search? + +=item .. search in several tables simultaneously? + +=item .. find more help on constructing searches? + +Behind the scenes, DBIx::Class uses L to help construct +it's SQL searches. So if you fail to find help in the +L, try looking in the SQL::Abstract +documentation. + +=back + +=head2 Fetching data + +=over 4 + +=item .. fetch as much data as possible in as few select calls as possible? (prefetch) + +See the prefetch examples in the L. + +=back + +=over 4 + +=head2 Inserting and updating data + +=over 4 + +=item .. insert many rows of data efficiently? + +=item .. update a collection of rows at the same time? + +=item .. use database functions when updating rows? + +=item .. update a column using data from another column? + +=back + +=head2 Misc + +=over 4 + +=item How do I store my own (non-db) data in my DBIx::Class objects? + +=item How do I use DBIx::Class objects my TT templates? + +=item See the SQL statements my code is producing? + +=item Why didn't my search run any SQL? + + +=back