当前位置:  开发笔记 > 编程语言 > 正文

如何使用固定连接条件建立DBIx :: Class关系?

如何解决《如何使用固定连接条件建立DBIx::Class关系?》经验,为你挑选了0个好方法。

我们有一个链接表,可以在一侧处理多种类型的对象,我无法弄清楚如何使用has_many从这些对象之一到链接表.

示例:链接表包含:

id link_id link_table resource_id
1  1       page       3
2  1       page       5
3  2       page       3
4  1       not_page   1

从资源方面建立关系很容易:

Resource->has_many(links => 'Link', 'resource_id');

但我无法从页面方面获得相应的关系:

Page->has_many(links => 'Link', 'link_id');

会得到not_page链接

Page->has_many(links => 'Link', {'foreign.link_id' => 'self.id', 'foreign.link_table' => 'page'});

给出了"无效的rel cond val页面"错误(这对我来说并不奇怪).

Page->has_many(links => 'Link', {'foreign.link_id' => 'self.id', 'foreign.link_table' => '"page"'});

给出"无效的相关信息"页面"'错误.投掷反斜杠并没有帮助.

DBIx :: Class :: Relationship :: Base说:

条件必须是表之间连接的SQL :: Abstract风格表示

我从那里尝试了各种不同的选择,例如:

Page->has_many(links => 'Link', {'foreign.link_id' => 'self.id', 'foreign.link_table' => {'=', 'page'}});

但没有任何成功.

如果我在页表中添加了另一个字段,它总是包含值'page',我可以这样做

Page->has_many(links => 'Link', {'foreign.link_id' => 'self.id', 'foreign.link_table' => 'self.what_table_am_i'});

但这不是最佳解决方案.

将链接表拆分为每种类型的单独一个可能是可能的,但这是一个正在考虑适应DBIx :: Class的现有项目,并且可能有其他地方将表拆分为多个其他表更多比它的价值更麻烦.

推荐阅读
郑谊099_448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有