【发布时间】:2011-01-16 09:38:11
【问题描述】:
在我正在构建的应用程序中,用户可以指定表之间的关系。
由于我只在运行时确定这一点,因此我无法在架构模块中指定 has_many 或 belongs_to 关系以进行启动。
所以给定两张表;系统和地点,我想添加关系以连接它们之间的记录。
我有以下部分解决方案:
$rs = $c->model('DB::system')->result_source;
$rs->add_relationship('locations','DB::place',{'foreign.fk0' => 'self.id'});
因此列fk0 将是映射到位置主键id 的外键。
我知道必须重新注册才能允许将来访问该关系,但我不知道。
【问题讨论】:
-
您确定您的用户真的更改了数据库架构吗?这完全等同于允许他们编辑源代码。您不一定需要使用 DBIx::Class 为您的“用户界面”建模。您可能想要开发一些提供您想要的功能的中间表示,并保持您的代码和数据库架构固定。
-
还有 DBIx::Class::Schema::Loader,如果你正在跟踪一个你无法控制的变化的数据库,或者类似的东西。但请记住,数据库架构更改会改变应用程序的行为。如果您的代码是静态的,而您的数据库架构是动态的,那么几乎可以肯定存在问题。
-
我正在探索使用我自己的架构/数据字典覆盖在实际数据库上的可能性。我有一个“列”表和一个“表”表。这些用于将用户选择的表和列名称和属性映射到底层通用表空间。因此,用户可以选择在运行时添加表之间的关系。我想通过 DBIx 访问这种关系。我正在构建一个中间接口来隐藏通用模式并需要此功能。谢谢,-乔
-
... 或者我应该只使用 Catalyst::Model::DBI
-
即使在 Catalyst 中使用 DBIC,您也可以轻松访问底层 DBI 对象 ($c->model->storage->dbh)。我们一直在我们的 Catalyst/DBIC 应用程序中这样做(事实上,这些天我们可能比直接使用 DBIC 更频繁地这样做——我已经开始讨厌 DBIC 了:)
标签: perl foreign-key-relationship catalyst dbix-class