我有两个在
上链接的课程foreign.weirdkey => substr(self.key, 1, 9)
...并且不能为我的生活弄清楚如何构建has_many调用以表明这一点。
底层数据库(一组Oracle表)定义没有外键,是固定的,并且不受我控制。
我已经浏览过这些文档,似乎无法找到一个在手册has_many定义范围内工作的语法。
非常感谢任何帮助。
答案 0 :(得分: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子句,并且不会将数据库用于字符串munging。如果您遇到问题,请将其移除或摆弄它。 DBIC_TRACE应该清楚说明发生了什么。
此处的文档:https://metacpan.org/pod/DBIx::Class::Relationship::Base#condition