use Scalar::Util qw/weaken blessed/;
use Try::Tiny;
+use DBIx::Class::_Util 'UNRESOLVABLE_CONDITION';
use namespace::clean;
=head1 NAME
=over 4
-=item Arguments: 'relname', 'Foreign::Class', $condition, $attrs
+=item Arguments: $rel_name, $foreign_class, $condition, $attrs
=back
- __PACKAGE__->add_relationship('relname',
+ __PACKAGE__->add_relationship('rel_name',
'Foreign::Class',
$condition, $attrs);
elect to additionally return a simplified join-free condition hashref when
invoked as C<< $result->relationship >>, as opposed to
C<< $rs->related_resultset('relationship') >>. In this case C<$result> is
-passed to the coderef as C<< $args->{self_rowobj} >>, so a user can do the
+passed to the coderef as C<< $args->{self_resultobj} >>, so a user can do the
following:
sub {
"$args->{foreign_alias}.artist" => { -ident => "$args->{self_alias}.artistid" },
"$args->{foreign_alias}.year" => { '>', "1979", '<', "1990" },
},
- $args->{self_rowobj} && {
- "$args->{foreign_alias}.artist" => $args->{self_rowobj}->artistid,
+ $args->{self_resultobj} && {
+ "$args->{foreign_alias}.artist" => $args->{self_resultobj}->artistid,
"$args->{foreign_alias}.year" => { '>', "1979", '<', "1990" },
},
);
self_alias => The alias of the invoking resultset
foreign_alias => The alias of the to-be-joined resultset (does *NOT* always match rel_name)
+ # only one of these (or none at all) will ever be supplied to aid in the
+ # construction of a join-free condition
self_resultobj => The invocant object itself in case of a $resultobj->$rel_name() call
+ foreign_resultobj => The related object in case of $resultobj->set_from_related($rel_name, $foreign_resultobj)
# deprecated inconsistent names, will be forever available for legacy code
self_rowobj => Old deprecated slot for self_resultobj
}
catch {
$self->throw_exception ($_) if $self->in_storage;
- $DBIx::Class::ResultSource::UNRESOLVABLE_CONDITION; # RV, no return()
+ UNRESOLVABLE_CONDITION; # RV, no return()
};
# keep in mind that the following if() block is part of a do{} - no return()s!!!
# FIXME - this conditional doesn't seem correct - got to figure out
# at some point what it does. Also the entire UNRESOLVABLE_CONDITION
# business seems shady - we could simply not query *at all*
- if ($cond eq $DBIx::Class::ResultSource::UNRESOLVABLE_CONDITION) {
+ if ($cond eq UNRESOLVABLE_CONDITION) {
my $reverse = $rsrc->reverse_relationship_info($rel);
foreach my $rev_rel (keys %$reverse) {
if ($reverse->{$rev_rel}{attrs}{accessor} && $reverse->{$rev_rel}{attrs}{accessor} eq 'multi') {
# sanity check - currently throw when a complex coderef rel is encountered
# FIXME - should THROW MOAR!
- if (ref $self) { # cdbi calls this as a class method, /me vomits
-
my $rsrc = $self->result_source;
my $rel_info = $rsrc->relationship_info($rel)
or $self->throw_exception( "No such relationship '$rel'" );
map { "'$_'" } @unspecified_rel_condition_chunks
));
}
- }
return $self->search_related($rel)->new_result($values);
}