由于历史原因,我们有一个表在工作中,其文本字段中的整数值对应于另一个表中的 ID。例子:
CREATE TABLE things (
id INTEGER,
name VARCHAR,
thingy VARCHAR
);
CREATE TABLE other_things (
id INTEGER,
name VARCHAR,
);
所以一个“东西”有一个“其他东西”,但不是明智地设置,连接字段是一个varchar,称为“thingy”。
所以在 Postgres 中,我可以这样做来加入两个表:
SELECT t.id, t.name, ot.name FROM things t
JOIN other_things ot ON CAST(t.thingy AS int) = ot.id
如何在 DBIx::Class 中表示这种关系?这是我尝试过的一件事的示例:
package MySchema::Thing;
__PACKAGE__->has_one(
'other_thing',
'MySchema::OtherThing',
{ 'foreign.id' => 'CAST(self.thingy AS int)' },
);