2012-04-16 51 views
4

我已經被上DBIx ::類的has_many加入對列

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

相連的兩個類的子...並不能爲我的生活弄清楚如何構建的has_many調用指示此。

底層數據庫(一組Oracle表)沒有定義外鍵,是固定的,並且超出了我的控制範圍。

我已經通過了文檔,似乎無法找到一個將在has_many手冊定義範圍內工作的語法。

任何幫助將不勝感激。

回答

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