gpt4 book ai didi

perl - 如何在运行时使用 DBIx::Class 和 Catalyst 添加关系?

转载 作者:行者123 更新时间:2023-12-03 14:46:10 26 4
gpt4 key购买 nike

在我正在构建的应用程序中,用户可以指定表之间的关系。

由于我只在运行时确定这一点,因此我无法在模式模块中指定 has_many 或 belongs_to 关系以进行启动。

所以给定两张表;系统和地点,我想添加关系以连接它们之间的记录。

我有以下解决方案的一部分:

$rs = $c->model('DB::system')->result_source;
$rs->add_relationship('locations','DB::place',{'foreign.fk0' => 'self.id'});

所以栏目 fk0将是到位置主键 id 的外键映射.

我知道必须重新注册才能允许将来访问该关系,但我无法弄清楚。

最佳答案

我不相信您可以在应用程序已经运行后重新定义这些关系。至少不会丢弃任何现有的 DBIC 对象,并从头开始重新创建它们。我怀疑到那时,重新启动您的应用程序会更容易。

如果您满足于在编译时动态定义这些东西,那是可能的……我们在我们的一个应用程序中做了类似的事情。

如果这对您有用,我可以提供一些示例代码。

DBIx::Class::ResultSet::View通过让您执行任意代码,但将结果作为 DBIx 对象检索,模块可能会提供您正在寻找的粗略近似值。

我对此类事情的一般看法是,任何抽象层(ORM 是一个抽象层)都是为了让生活更轻松。当它妨碍你的应用程序做它想做的事情时,它不再让生活变得更轻松,应该被丢弃(对于特定的用途——不一定适用于所有用途)。出于这个原因,我建议使用 DBI,正如您在其中一个评论中所建议的那样。我怀疑在这种情况下它会让你的生活更轻松。

关于perl - 如何在运行时使用 DBIx::Class 和 Catalyst 添加关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2256134/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com