2012-04-16 4 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) 
    }) 
}); 

Обратите внимание, что я использую SUBSTR PERL, если у вас есть текущий объект строки, так, то присоединиться к разрушится в просто где положение и не будет использовать базу данных для перемещение строки. Удалите это или играйте с ним, если у вас есть проблемы. DBIC_TRACE должен четко прояснить, что происходит.

Документация: https://metacpan.org/pod/DBIx::Class::Relationship::Base#condition