4

我有两个链接的课程

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 回答