Hi Kenneth,

ResultSet classes go into the ResultSet folder so DBIC can find them when it loads its namespaces.
So you should have a directory structure like this:
dbms/
  Schema/
    Result/
      Account.pm
    ResultSet/
      Account.pm

in the end.
And your ResultSet::Account file starts with

package dbms::Schema::ResultSet::Account;

I haven't tried frew's new helper yet, so can't comment on that (but will try it, sounds great!), but this will at least point you in the right direction I hope. There is also still a little bit of confusion about Catalyst and DBIC: it doesn't matter what you do with the Schema in Catalyst. Catalyst simply consumes your Schema class and the helper script just sets this up for you so you can access it as a Model but it's still plain old DBIC. My advice would be to write some unit tests for the new ResultSet functionality in your DBIC Schema class. forget about Catalyst for the moment and get this to work with DBIC. Once this is working you can simply use it in Catalyst in exactly the same way. Getting a test to work is also the best way of documenting your Schema (or any) class because you have working code for your future reference.

Frank



On 11/05/12 17:13, Kenneth S Mclane wrote:
Ok, I created this file as a Resultset and put it in a Resultset folder next to my result folder.

package dbms::Schema::Result::Account;

 use base 'DBIx::Class::ResultSet';

__PACKAGE__->load_components(qw(Helper::ResultSet::CorrelateRelationship));

 sub sub_count {
   my $self = shift;

   $self->search(undef, {
     '+columns' => {
       num_subs => $self->correlate('subs')->count_rs->as_query
     }
   });
 }

 1;

Then I created a controller just to see if I can get any data back from this.

package dbms::Controller::subcount;
use Moose;
use namespace::autoclean;

BEGIN {extends 'Catalyst::Controller'; }

=head1 NAME

dbms::Controller::subcount - Catalyst Controller

=head1 DESCRIPTION

Catalyst Controller.

=head1 METHODS

=cut


=head2 index

=cut

sub index :Path :Args(0) {
    my ( $self, $c ) = @_;

$c->response->body('Matched dbms::Controller::subcount in subcount.');
}

sub list :Local {
        my ($self, $c) = @_;
        my $rows = $c->model('ORANGES::Subcount')->sub_count->all;
        $c->stash(rows => $rows);
        $c->stash->{'template'}=>'subcount/list';
}

=head1 AUTHOR

root

=head1 LICENSE

This library is free software. You can redistribute it and/or modify
it under the same terms as Perl itself.

=cut

__PACKAGE__->meta->make_immutable;

1;

Your example shows doing this:

 my $rows = $schema->resultset('Author')->with_book_count->all;

but it bombs out because $schema is not declared, and I don't know what value it should hold. I have been trying to reference it in my code above but nothing I have tried has been successful. Please remember that I am using the Catalyst helper script to create my model for the database, so I am coming at this from a different direction than someone who built their own model.


From:   fREW Schmidt <[email protected]>
To:     "DBIx::Class user and developer list" <[email protected]>
Date:   05/10/2012 12:08 PM
Subject:        Re: [Dbix-class] Query translation


------------------------------------------------------------------------




SELECT
            s.server_id,
            a.account_code,
            s.server_name,
            s.server_type,
            s.os_name,
            (select count(*) from server ss, subsystem sb
                   where ss.server_id = sb.server_id
                   and ss.server_id = s.server_id) as num_subsystems
           FROM
            account a,
            server s
           WHERE a.account_id = s.account_id
           order by a.account_code, s.server_name

Actually, I *just* released a helper that will do the correlated subquery for you. Check it out here: _http://search.cpan.org/~frew/DBIx-Class-Helpers-2.008000/lib/DBIx/Class/Helper/ResultSet/CorrelateRelationship.pm_ <http://search.cpan.org/%7Efrew/DBIx-Class-Helpers-2.008000/lib/DBIx/Class/Helper/ResultSet/CorrelateRelationship.pm>
--
fREW Schmidt_
__http://blog.afoolishmanifesto.com_ <http://blog.afoolishmanifesto.com/>_______________________________________________
List: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/dbix-class
IRC: irc.perl.org#dbix-class
SVN: http://dev.catalyst.perl.org/repos/bast/DBIx-Class/
Searchable Archive: http://www.grokbase.com/group/[email protected]



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


--
The Wellcome Trust Sanger Institute is operated by Genome Research Limited, a charity registered in England with number 1021457 and a company registered in England with number 2742969, whose registered office is 215 Euston Road, London, NW1 2BE.
_______________________________________________
List: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/dbix-class
IRC: irc.perl.org#dbix-class
SVN: http://dev.catalyst.perl.org/repos/bast/DBIx-Class/
Searchable Archive: http://www.grokbase.com/group/[email protected]

Reply via email to