DBICでbelongs_toからmight_have,has_oneへ変更でInvalid rel cond key

DBICのリレーションでエラーが出た部分について。
 
perlのあるテーブルのリレーションをbelongs_to から might_haveにすることにしました。
#変更前
__PACKAGE__->belongs_to( 'item'  => 'Test::Schema::Item',  { 'item_id'  => 'item_id' , 'date' => 'date }  );

#変更後
__PACKAGE__->might_have( 'item'  => 'Test::Schema::Item',  { 'item_id'  => 'item_id' , 'date' => 'date }  );


Catalyst エラーがでました。
Invalid rel cond key date at

無効なキー???

どうやらDBIx::Class::Relationshipのコード以下の部分でエラーになったみたいです。
正規表現でforeignとselfをチェックしていました。

sub resolve_condition {
  my ($self, $cond, $rel, $for) = @_;
  #warn %$cond;
  if (ref $cond eq 'HASH') {
    my %ret;
    while (my ($k, $v) = each %{$cond}) {
      # XXX should probably check these are valid columns
      $k =~ s/^foreign\.// || $self->throw_exception("Invalid rel cond key ${k}");
      $v =~ s/^self\.// || $self->throw_exception("Invalid rel cond val ${v}");
      if (ref $for) { # Object
        #warn "$self $k $for $v";
        $ret{$k} = $for->get_column($v);
        #warn %ret;
      } else {
        $ret{"${rel}.${k}"} = "${for}.${v}";
      }
    }
    return \%ret;
  } elsif (ref $cond eq 'ARRAY') {
    return [ map { $self->resolve_condition($_, $rel, $for) } @$cond ];
  } else {
   die("Can't handle this yet :(");
  }
}
リレーションで第二引数として渡していたハッシュでのキーがエラーの原因でした。
以下のような変更で正常になりました。
 
#変更前
__PACKAGE__->belongs_to( 'item'  => 'Test::Schema::Item',  { 'item_id'  => 'item_id' , 'date' => 'date }  );

#変更後(正しい)
__PACKAGE__->might_have( 'item'  => 'Test::Schema::Item',  { 'foreign.item_id'  => 'self.item_id' , 'foreign.date' => 'self.date' }  );


どうやらmight_have,has_oneでは、必ず「 foreign 」と「 self 」がないとダメみたいですね。