我有两个链接的类
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
关于perl - DBIx::Class has_many 连接列的子串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10178622/