perl - DBIx::Class has_many 连接列的子串

标签 perl dbix-class

我有两个链接的类

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/

相关文章:

database - 具有多个条目的 DBIX 预取有效但会抛出哈希错误,有没有办法解决这个问题?

perl - Perl 方法调用可以被拦截吗?

Perl DBIx::Class DateTime 减法

perl - 如何从 Perl 设置文件权限?

perl - 在 perl 中替换文本中的一组单词的速度 -

perl - Perl DBIx::Class 能否覆盖从数据库中检索列的方式?

perl - 如何使用recursive_update

sql - 与多合一表相比,使用单独的角色桥接表有哪些优势?

perl - 将 Perl 数组扩展为 shell 命令参数

database - 如何在 mod_perl 中拥有 DBIC 持久数据库连接?