X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FRelationship%2FBase.pm;h=ba71b3052fa8a58237669cf4eccd5d04cc828316;hb=1a14aa3f5016c456db28c148abab256ea72776df;hp=05f25081fe65356e87c5dbed10fca97a092d64f5;hpb=15fe6346d3458b5127c743409c5407e0dbc3931b;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/Relationship/Base.pm b/lib/DBIx/Class/Relationship/Base.pm index 05f2508..ba71b30 100644 --- a/lib/DBIx/Class/Relationship/Base.pm +++ b/lib/DBIx/Class/Relationship/Base.pm @@ -182,9 +182,25 @@ sub new_related { return $self->resolve_class($rel_obj->{class})->new(\%fields); } +sub find_related { + my $self = shift; + my $rel = shift; + my $rel_obj = $self->_relationships->{$rel}; + $self->throw( "No such relationship ${rel}" ) unless $rel_obj; + my ($cond) = $self->resolve_condition($rel_obj->{cond}, { _action => 'convert' }); + $self->throw( "Invalid query: @_" ) if (@_ > 1 && (@_ % 2 == 1)); + my $attrs = { }; + if (@_ > 1 && ref $_[$#_] eq 'HASH') { + $attrs = { %{ pop(@_) } }; + } + my $query = ((@_ > 1) ? {@_} : shift); + $query = ($query ? { '-and' => [ $cond, $query ] } : $cond); + return $self->resolve_class($rel_obj->{class})->find($query); +} + sub find_or_create_related { my $self = shift; - return ($self->search_related(@_))[0] || $self->create_related(@_); + return $self->find_related(@_) || $self->create_related(@_); } sub set_from_related {