1 package Common
::RDBO
::Helper
::Comment
::Manager
;
6 use Rose
::Object
::MixIn
();
7 our @ISA = qw(Rose::Object::MixIn);
9 use Hash
::Merge
'merge';
11 __PACKAGE__
->export_tag(
12 all
=> [ qw
/ get_list get_recent fill_comment_count / ] );
16 my %args = ref $_[ 0 ] eq 'HASH' ?
%{ $_[ 0 ] } : @_;
21 return $self->get_objects( %args );
26 my %args = ref $_[ 0 ] eq 'HASH' ?
%{ $_[ 0 ] } : @_;
28 my $limit = delete $args{ limit
} || 10;
35 sort_by
=> 'addtime DESC',
38 #require_objects => [ 'post' ]
44 return $self->get_list( $cond );
47 sub fill_comment_count
{
50 ref $_[ 0 ] eq 'HASH' ?
%{ $_[ 0 ] }
51 : scalar @_ == 1 ?
( objects
=> $_[ 0 ] )
55 if ( ref $args{ objects
} eq 'ARRAY' ) {
56 @objects = @
{ delete $args{ objects
} };
58 $objects[0] = delete $args{ objects
};
62 grep { $_->name eq 'comments' }
63 @
{ $self->object_class->meta->relationships };
65 if ( scalar @objects ) {
67 query
=> [ master_id
=> [ map { $_->id } @objects ] ],
68 select => [ 'master_id', \'COUNT
(id
) AS comment_count
' ],
69 group_by => 'master_id
'
73 my $comments = $self->get_objects( %$cond );
75 my %comments = map { $_->master_id => $_->comment_count } @$comments;
77 foreach ( @objects ) {
78 $_->{ comment_count } = $comments{ $_->id }
79 if $comments{ $_->id };