diff options
-rw-r--r-- | perllib/FixMyStreet/App/Model/DB.pm | 11 | ||||
-rw-r--r-- | perllib/FixMyStreet/DB/Result/Problem.pm | 6 | ||||
-rw-r--r-- | perllib/FixMyStreet/DB/Schema.pm | 2 |
3 files changed, 17 insertions, 2 deletions
diff --git a/perllib/FixMyStreet/App/Model/DB.pm b/perllib/FixMyStreet/App/Model/DB.pm index 9d09186b8..ffd867485 100644 --- a/perllib/FixMyStreet/App/Model/DB.pm +++ b/perllib/FixMyStreet/App/Model/DB.pm @@ -5,19 +5,28 @@ use strict; use warnings; use FixMyStreet; +use Moose; + +with 'Catalyst::Component::InstancePerContext'; __PACKAGE__->config( schema_class => 'FixMyStreet::DB::Schema', connect_info => sub { FixMyStreet::DB->schema->storage->dbh }, ); +sub build_per_context_instance { + my ( $self, $c ) = @_; + $self->schema->cache({}); + return $self; +} + =head1 NAME FixMyStreet::App::Model::DB - Catalyst DBIC Schema Model =head1 DESCRIPTION -L<Catalyst::Model::DBIC::Schema> Model using schema L<FixMyStreet::DB> +L<Catalyst::Model::DBIC::Schema> Model using schema L<FixMyStreet::DB::Schema> =cut diff --git a/perllib/FixMyStreet/DB/Result/Problem.pm b/perllib/FixMyStreet/DB/Result/Problem.pm index 19e76f6ed..0d1b396a9 100644 --- a/perllib/FixMyStreet/DB/Result/Problem.pm +++ b/perllib/FixMyStreet/DB/Result/Problem.pm @@ -508,12 +508,16 @@ has bodies => ( default => sub { my $self = shift; return {} unless $self->bodies_str; + my $cache = $self->result_source->schema->cache; + return $cache->{bodies}{$self->bodies_str} if $cache->{bodies}{$self->bodies_str}; + my $bodies = $self->bodies_str_ids; my @bodies = $self->result_source->schema->resultset('Body')->search( { id => $bodies }, { prefetch => 'body_areas' }, )->all; - return { map { $_->id => $_ } @bodies }; + $cache->{bodies}{$self->bodies_str} = { map { $_->id => $_ } @bodies }; + return $cache->{bodies}{$self->bodies_str}; }, ); diff --git a/perllib/FixMyStreet/DB/Schema.pm b/perllib/FixMyStreet/DB/Schema.pm index 45d731c33..10bbd434f 100644 --- a/perllib/FixMyStreet/DB/Schema.pm +++ b/perllib/FixMyStreet/DB/Schema.pm @@ -25,4 +25,6 @@ __PACKAGE__->connection(FixMyStreet->dbic_connect_info); has lang => ( is => 'rw' ); +has cache => ( is => 'rw', lazy => 1, default => sub { {} } ); + 1; |