Joe*_*Joe 6 perl catalyst foreign-key-relationship dbix-class
在我正在构建的应用程序中,用户可以指定表之间的关系.
由于我只是在运行时确定这一点,因此我无法在架构模块中指定has_many或belongs_to关系以进行启动.
所以有两张桌子; 系统和地方,我想添加关系,以加入他们之间的记录.
我有以下解决方案的一部分:
$rs = $c->model('DB::system')->result_source;
$rs->add_relationship('locations','DB::place',{'foreign.fk0' => 'self.id'});
Run Code Online (Sandbox Code Playgroud)
因此该列fk0将是映射到位置主键的外键id.
我知道必须重新注册以允许将来访问这种关系,但我无法弄明白.
我不相信您可以在应用程序运行后重新定义这些关系。至少在不丢弃任何现有 DBIC 对象并从头开始重新创建它们的情况下是这样。我怀疑,到那时,重新启动您的应用程序会更容易。
如果您满足在编译时动态定义这些内容,这是可能的......我们在我们的一个应用程序中做了类似的事情。
如果这对您有用,我可以提供一些示例代码。
DBIx ::Class::ResultSet::View模块可能会提供您正在寻找的内容的粗略近似值,方法是让您执行任意代码,但以 DBIx 对象的形式检索结果。
我对此类事情的一般看法是,任何抽象层(ORM 就是一个抽象层)都是为了让生活变得更轻松。当它妨碍你的应用程序做它想做的事情时,它不再让生活变得更容易,并且应该被丢弃(对于特定用途 - 不一定对于每个用途)。出于这个原因,我建议使用 DBI,正如您在评论之一中所建议的那样。我怀疑在这种情况下这会让你的生活变得更加轻松。
| 归档时间: |
|
| 查看次数: |
839 次 |
| 最近记录: |