我有两个链接的课程
foreign.weirdkey => substr(self.key, 1, 9)
...并且我一生都无法弄清楚如何构造 has_many 调用来表明这一点。
底层数据库(一组 Oracle 表)没有定义外键,是固定的,并且不在我的控制范围内。
我浏览了文档,似乎找不到在手动 has_many 定义范围内有效的语法。
任何帮助将非常感激。
我有两个链接的课程
foreign.weirdkey => substr(self.key, 1, 9)
...并且我一生都无法弄清楚如何构造 has_many 调用来表明这一点。
底层数据库(一组 Oracle 表)没有定义外键,是固定的,并且不在我的控制范围内。
我浏览了文档,似乎找不到在手动 has_many 定义范围内有效的语法。
任何帮助将非常感激。
像这样的东西应该工作:
__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