The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

DBIx::Cookbook::Recipe::Searching::grouping - GROUP BY

DESCRIPTION

SELECT 
  first_name, last_name, COUNT(film_actors.actor_id) 
FROM 
  actor INNER JOIN film_actors USING (actor_id)
GROUP BY
  film_actors.actor_id

Sample Usage:

shell> ${orm}_cmd grouping  # orm = dbic, skinny, rose, etc

RECIPES

DBIx::Class

package DBIx::Cookbook::DBIC::Command::grouping;
use Moose;
extends qw(MooseX::App::Cmd::Command);

=for comment

if the $attr below is confusing, see 
http://search.cpan.org/~ribasushi/DBIx-Class-0.08120/lib/DBIx/Class/ResultSet.pm#ATTRIBUTES

=cut

sub execute {
  my ($self, $opt, $args) = @_;

  my $where = {};

  my $attr = {
	      join   => [ 'film_actors' ],
	      select => [ qw/first_name last_name/, { count => 'film_actors.actor_id' } ],
	      as     => [ qw/first_name last_name film_count/ ],
	      group_by => [ 'film_actors.actor_id' ]
	     };

  my $rs = $self->app->schema->resultset('Actor')->search($where, $attr);

  while (my $row = $rs->next) {
    use Data::Dumper;
    my %data = $row->get_columns;
    warn Dumper(\%data);
    
  }
}

1;