1 package DBIx::Class::Relationship::HasOne;
7 my ($class, $acc_name, $f_class, $conds, $args) = @_;
8 eval "require $f_class";
9 # single key relationship
10 if (not defined $conds && not defined $args) {
11 my ($pri, $too_many) = keys %{ $f_class->_primaries };
12 my $acc_type = ($class->_columns->{$acc_name}) ? 'filter' : 'single';
13 $class->add_relationship($acc_name, $f_class,
14 { "foreign.${pri}" => "self.${acc_name}" },
15 { accessor => $acc_type }
18 # multiple key relationship
20 my %f_primaries = %{ $f_class->_primaries };
23 $conds_rel->{"foreign.$_"} = "self.".$conds->{$_};
24 # primary key usage checks
25 if (exists $f_primaries{$_}) {
26 delete $f_primaries{$_};
30 $class->throw("non primary key used in join condition: $_");
33 $class->throw("not all primary keys used in multi key relationship!") if keys %f_primaries;
34 $class->add_relationship($acc_name, $f_class,
36 { accessor => 'single' }