4

リンクされている2つのクラスがあります

foreign.weirdkey => substr(self.key, 1, 9)

...そして、私の人生では、これを示す has_many 呼び出しを構築する方法を理解することはできません。

基礎となるデータベース (一連の Oracle テーブル) は、外部キーを定義しておらず、固定されており、私の管理外です。

私はドキュメントを調べてきましたが、手動の has_many 定義の範囲内で機能する構文を見つけることができないようです。

どんな助けでも大歓迎です。

4

1 に答える 1

3

このようなものはうまくいくはずです:

__PACKAGE__->has_many( baubles => 'My::Schema::Result::Thing', sub {
   my $args = shift;

   return ({
      "$args->{foreign_alias}.weirdkey" => \"substr($args->{self_alias}.key, 1, 9)",
   },
   $args->{self_rowobj} && {
      "$args->{foreign_alias}.weirdkey" => substr($args->{self_rowobj}->key, 1, 9)
   })
});

現在の行オブジェクトがある場合は、perl の substr を使用することに注意してください。そのため、結合は単なる where 句に折りたたまれ、文字列変更にデータベースは使用されません。問題がある場合は、それを削除するか、いじってください。DBIC_TRACE は、何が起こっているかを明確にする必要があります。

ドキュメントはこちら: https://metacpan.org/pod/DBIx::Class::Relationship::Base#condition

于 2012-04-18T13:57:42.573 に答える