aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--perllib/FixMyStreet/App/Model/DB.pm11
-rw-r--r--perllib/FixMyStreet/DB/Result/Problem.pm6
-rw-r--r--perllib/FixMyStreet/DB/Schema.pm2
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;