Kit*_*ers 7 postgresql perl dbix-class
由于历史原因,我们有一个工作表,在文本字段中具有与另一个表中的ID对应的整数值.例:
CREATE TABLE things (
id INTEGER,
name VARCHAR,
thingy VARCHAR
);
CREATE TABLE other_things (
id INTEGER,
name VARCHAR,
);
Run Code Online (Sandbox Code Playgroud)
所以"东西"有一个"其他东西",但是不是合理地设置,连接字段是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
Run Code Online (Sandbox Code Playgroud)
我怎样才能在DBIx :: Class中表示这种关系?这是我尝试过的一件事的例子:
package MySchema::Thing;
__PACKAGE__->has_one(
'other_thing',
'MySchema::OtherThing',
{ 'foreign.id' => 'CAST(self.thingy AS int)' },
);
Run Code Online (Sandbox Code Playgroud)
nwellnhof 很接近,但是为了将字面 SQL 转换为 SQL::Abstract,我必须像这样执行 coderef:
__PACKAGE__->has_one(
'other_thing',
'MySchema::OtherThing',
sub {
my $args = shift;
return {
qq{$args->{'foreign_alias'}.id} => { q{=} => \qq{CAST($args->{'self_alias'}.dept AS int)} },
};
},
);
Run Code Online (Sandbox Code Playgroud)