On 5/24/07, Steve Francia <[EMAIL PROTECTED]> wrote:
Since all doesn't take any parameters, but search does you can do what I am 
asking for with search.

Add the prefetch to search while searching for nothing and then apply the all.

$c->model('vidDB::video')->search( {}, { prefetch => [qw/ owner /] } )->all();

Seems like a roundabout approach, is there a better way to do it?
Is there any reason the all method doesn't accept parameters?


It may seem roundabout in your particular case, but it makes the most
sense for the overall API as it stands.

The reason ->all doesn't take parameters is because resultset objects
are multi-roled, so to speak.  On the one hand, a resultset object is
an abstraction of a searchable collection of objects of a given type
(or if you prefer, a searchable collection of rows in a table).  Using
->search() -like methods on a resultset produces another resultset
with further refinements, but does not hit the database and/or
actually instantiate any objects (fetch any rows).

On the other hand, a resultset object can also be used to realize this
abstraction (execute the SQL representation of the built-up
parameters) and iterate the actual objects/rows, via the
iteration-related methods ->first(), ->next(), ->all(), which return
actual objects (or an array of objects in the case of all), rather
than another resultset.

With 20/20 hindsight, it's easy to say now that the
realization/iteration part may have been better as something separate,
as in "my $realized_resultset = $resultset->realize();", and have the
iterator/all/count/etc stuff happen on those objects, and then perhaps
provide some convenience methods, like "->all()" on resultsets that
instantiate a temporary realized_resultset for one call and do ->all()
on it.

I guess in either case we could, in theory, patch $rs->all() to take
search arguments and have it do the search internally, but I like the
way the call looks now in your example.  Perhaps that's just because
I've gotten very used to the resultset concept.

-- Brandon

_______________________________________________
List: http://lists.rawmode.org/cgi-bin/mailman/listinfo/dbix-class
Wiki: http://dbix-class.shadowcatsystems.co.uk/
IRC: irc.perl.org#dbix-class
SVN: http://dev.catalyst.perl.org/repos/bast/trunk/DBIx-Class/
Searchable Archive: http://www.mail-archive.com/[email protected]/

Reply via email to