X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FManual%2FFAQ.pod;h=2ff72ee489755ed69505edc18daf149b7540821d;hb=88262f96056323dd426285bd45fbe385168cd0d3;hp=540bd213c4d41a6b359b1e2c4198b1fee78390dd;hpb=1697e138eeb96cab5ab20c35a8834cf8ce5106d1;p=dbsrgits%2FDBIx-Class-Historic.git diff --git a/lib/DBIx/Class/Manual/FAQ.pod b/lib/DBIx/Class/Manual/FAQ.pod index 540bd21..2ff72ee 100644 --- a/lib/DBIx/Class/Manual/FAQ.pod +++ b/lib/DBIx/Class/Manual/FAQ.pod @@ -266,6 +266,25 @@ fetches the real value and does the formatting you want. See the Cookbook for more details. +=item .. fetch a single (or topmost) row? + +Sometimes you many only want a single record back from a search. A quick +way to get that single row is to first run your search as usual: + + ->search->(undef, { order_by => "id DESC" }) + +Then call L and ask it only to return 1 row: + + ->slice(0,1) + +These two calls can be combined into a single statement: + + ->search->(undef, { order_by => "id DESC" })->slice(0,1) + +Why slice instead of L or L? +If supported by the database, slice will use LIMIT/OFFSET to hint to the database that we +really only need one row. This can result in a significant speed improvement. + =back =head2 Inserting and updating data @@ -307,9 +326,11 @@ scalar reference: ->update({ somecolumn => \'othercolumn' }) -=item .. store JSON in a column and have it deflate/inflate automatically? +=item .. store JSON/YAML in a column and have it deflate/inflate automatically? -In your table schema class, do the following: +You can use L to accomplish YAML/JSON storage transparently. + +If you want to use JSON, then in your table schema class, do the following: use JSON; @@ -319,6 +340,21 @@ In your table schema class, do the following: deflate => sub { objToJson(shift) }, }); +For YAML, in your table schema class, do the following: + + use YAML; + + __PACKAGE__->add_columns(qw/ ... my_column ../) + __PACKAGE__->inflate_column('my_column', { + inflate => sub { YAML::Load(shift) }, + deflate => sub { YAML::Dump(shift) }, + }); + +This technique is an easy way to store supplemental unstructured data in a table. Be +careful not to overuse this capability, however. If you find yourself depending more +and more on some data within the inflated column, then it may be time to factor that +data out. + =back =head2 Misc