X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FManual%2FFAQ.pod;h=114583df49054bfddd45a7affa862db54ddded27;hb=40f2550b1a00ae9f2ff993e7bef867adf73b8aff;hp=9c19d31790e1743ea5b6a967e5f759e473928251;hpb=bc96f2606c021439a25e1376db53fe418cf4bb49;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/Manual/FAQ.pod b/lib/DBIx/Class/Manual/FAQ.pod index 9c19d31..114583d 100644 --- a/lib/DBIx/Class/Manual/FAQ.pod +++ b/lib/DBIx/Class/Manual/FAQ.pod @@ -68,8 +68,26 @@ connection does not happen until you actually request data, so don't be alarmed if the error from incorrect connection details happens a lot later. +=item .. use DBIx::Class across multiple databases? -=back +If your database server allows you to run querys across multiple +databases at once, then so can DBIx::Class. All you need to do is make +sure you write the database name as part of the +L call. Eg: + + __PACKAGE__->table('mydb.mytablename'); + +And load all the Result classes for both / all databases using one +L call. + +=item .. use DBIx::Class across PostgreSQL/DB2/Oracle schemas? + +Add the name of the schema to the L +as part of the name, and make sure you give the one user you are going +to connect with rights to read/write all the schemas/tables as +necessary. + +=back =head2 Relationships @@ -94,7 +112,7 @@ for details. Create a C relationship for the field containing the foreign key. See L. -=item .. define a foreign key relationship where the key field may contain NULL? +=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 @@ -256,7 +274,7 @@ replaced with the following.) Or, if you have quoting off: - ->search({ 'YEAR(date_of_birth' => 1979 }); + ->search({ 'YEAR(date_of_birth)' => 1979 }); =item .. find more help on constructing searches? @@ -289,8 +307,8 @@ See the prefetch examples in the L. =item .. fetch a whole column of data instead of a row? -Call C on a L, this returns a -L, see it's documentation and the +Call C on a L. This returns a +L. See its documentation and the L for details. =item .. fetch a formatted column? @@ -335,6 +353,20 @@ to get a new, fresh copy of the row, just re-fetch the row from storage. L does just that by re-fetching the row from storage using the row's primary key. +=item .. fetch my data a "page" at a time? + +Pass the C and C attributes to your search, eg: + + ->search({}, { rows => 10, page => 1}); + +=item .. get a count of all rows even when paging? + +Call C on the paged resultset, it will return a L +object. Calling C on the pager will return the correct +total. + +C on the resultset will only return the total number in the page. + =back =head2 Inserting and updating data @@ -378,17 +410,17 @@ scalar reference: But note that when using a scalar reference the column in the database will be updated but when you read the value from the object with e.g. - + ->somecolumn() - + you still get back the scalar reference to the string, B the new value in the database. To get that you must refresh the row from storage using C. Or chain your function calls like this: ->update->discard_changes - - to update the database and refresh the object in one step. - + +to update the database and refresh the object in one step. + =item .. store JSON/YAML in a column and have it deflate/inflate automatically? You can use L to accomplish YAML/JSON storage transparently. @@ -442,7 +474,7 @@ An another method is to use L with your L package. package MyTable; use Moose; # import Moose - use Moose::Util::TypeConstraint; # import Moose accessor type constraints + use Moose::Util::TypeConstraint; # import Moose accessor type constraints extends 'DBIx::Class'; # Moose changes the way we define our parent (base) package @@ -454,7 +486,7 @@ With either of these methods the resulting use of the accesssor would be my $row; - # assume that some where in here $row will get assigned to a MyTable row + # assume that somewhere in here $row will get assigned to a MyTable row $row->non_column_data('some string'); # would set the non_column_data accessor @@ -462,7 +494,7 @@ With either of these methods the resulting use of the accesssor would be $row->update(); # would not inline the non_column_data accessor into the update - + =item How do I use DBIx::Class objects in my TT templates? Like normal objects, mostly. However you need to watch out for TT @@ -504,7 +536,7 @@ Look at the tips in L =item How do I reduce the overhead of database queries? You can reduce the overhead of object creation within L -using the tips in L +using the tips in L and L =back @@ -520,3 +552,38 @@ group, or stringify_self method) ? See L =back + +=head2 Troubleshooting + +=over 4 + +=item Help, I can't connect to postgresql! + +If you get an error such as: + + DBI connect('dbname=dbic','user',...) failed: could not connect to server: + No such file or directory Is the server running locally and accepting + connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"? + +Likely you have/had two copies of postgresql installed simultaneously, the +second one will use a default port of 5433, while L is compiled with a +default port of 5432. + +You can chance the port setting in C. + +=item I've lost or forgotten my mysql password + +Stop mysqld and restart it with the --skip-grant-tables option. + +Issue the following statements in the mysql client. + + UPDATE mysql.user SET Password=PASSWORD('MyNewPass') WHERE User='root'; + FLUSH PRIVILEGES; + +Restart mysql. + +Taken from: + +L. + +=back