From ec288a50def5c4fdcd7b001087fed0b120e4a211 Mon Sep 17 00:00:00 2001 From: Marcel de Rooy Date: Fri, 31 Mar 2017 13:52:15 +0200 Subject: [PATCH] Bug 18361: Koha::Objects->find should accept composite primary keys Changes the $id parameter to an array. (IssuingRule has three keys.) The build_object method in TestBuilder.pm has been adjusted to pass multiple primary key values to find. Also adjusted the POD section to show more clearly that we accept the same parameters as DBIx ResultSet does. Test plan: Run t/db_dependent/Koha/Object.t Run t/db_dependent/Koha/Objects.t Run t/db_dependent/TestBuilder.t Signed-off-by: Marcel de Rooy Signed-off-by: Tomas Cohen Arazi Signed-off-by: Jonathan Druart --- Koha/Objects.pm | 16 +++++++++++----- t/lib/TestBuilder.pm | 2 +- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/Koha/Objects.pm b/Koha/Objects.pm index 5080e7d0aa..ff1a7e5ebc 100644 --- a/Koha/Objects.pm +++ b/Koha/Objects.pm @@ -70,19 +70,25 @@ sub _new_from_dbic { =head3 Koha::Objects->find(); -my $object = Koha::Objects->find($id); -my $object = Koha::Objects->find( { keypart1 => $keypart1, keypart2 => $keypart2 } ); +Similar to DBIx::Class::ResultSet->find this method accepts: + \%columns_values | @pk_values, { key => $unique_constraint, %attrs }? +Strictly speaking, columns_values should only refer to columns under an +unique constraint. + +my $object = Koha::Objects->find( { col1 => $val1, col2 => $val2 } ); +my $object = Koha::Objects->find( $id ); +my $object = Koha::Objects->find( $idpart1, $idpart2, $attrs ); # composite PK =cut sub find { - my ( $self, $id ) = @_; + my ( $self, @pars ) = @_; croak 'Cannot use "->find" in list context' if wantarray; - return unless defined($id); + return unless @pars; - my $result = $self->_resultset()->find($id); + my $result = $self->_resultset()->find( @pars ); return unless $result; diff --git a/t/lib/TestBuilder.pm b/t/lib/TestBuilder.pm index 6509aee9da..ce8f601ede 100644 --- a/t/lib/TestBuilder.pm +++ b/t/lib/TestBuilder.pm @@ -74,7 +74,7 @@ sub build_object { my @ids; foreach my $pk ( @pks ) { - push @ids, { $pk => $hashref->{ $pk } }; + push @ids, $hashref->{ $pk }; } my $object = $class->find( @ids ); -- 2.39.5