=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);
metadata. Currently the supplied coderef is executed as:
$relationship_info->{cond}->({
- self_alias => The alias of the invoking resultset ('me' in case of a result object),
- foreign_alias => The alias of the to-be-joined resultset (often matches relname),
- self_resultsource => The invocant's resultsource,
- foreign_relname => The relationship name (does *not* always match foreign_alias),
- self_rowobj => The invocant itself in case of a $result_object->$relationship call
+ self_resultsource => The resultsource instance on which rel_name is registered
+ rel_name => The relationship name (does *NOT* always match foreign_alias)
+
+ 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
+ foreign_relname => Old deprecated slot for rel_name
});
=head3 attributes
};
# keep in mind that the following if() block is part of a do{} - no return()s!!!
- if ($is_crosstable) {
- $self->throw_exception (
- "A cross-table relationship condition returned for statically declared '$rel'"
- ) unless ref $rel_info->{cond} eq 'CODE';
+ if ($is_crosstable and ref $rel_info->{cond} eq 'CODE') {
# A WHOREIFFIC hack to reinvoke the entire condition resolution
# with the correct alias. Another way of doing this involves a
$rel_info->{cond}, $rel, $self, $rel
);
- $self->throw_exception("Custom relationship '$rel' does not resolve to a join-free condition fragment")
+ $self->throw_exception("Relationship '$rel' does not resolve to a join-free condition fragment")
if $crosstable;
if (
my ($cond, $crosstable, $nonequality_foreign_columns) = $rsrc->_resolve_condition (
$rel_info->{cond}, $f_obj, $rel, $rel
);
- $self->throw_exception("Custom relationship '$rel' does not resolve to a join-free condition fragment")
+ $self->throw_exception("Relationship '$rel' does not resolve to a join-free condition fragment")
if $crosstable;
$self->throw_exception(sprintf (