我正在使用PostgreSQL几何列的PostgreSQL数据库。
我想配置Result类,以便使用ST_AsEWKT函数对几何列进行膨胀,并使用ST_GeomFromEWKT函数进行放气。
有没有办法做到这一点,以便“查找”方法正常工作,以便“更新”和“创建”方法也正常工作。如果可以避免的话,我宁愿不必为每个表编写专门的查询。
我可以使用黑客来填充列,例如
__PACKAGE__->inflate_column( 'geo', {
inflate => sub {
my ($raw_value, $result) = @_;
my $col = $result->result_source->resultset->get_column("geo")->func("ST_AsEWKT");
},
});
但我不确定如何实施通货紧缩。
提前致谢。
答案 0 :(得分:0)
我有一个使用DBIx :: Class :: InflateColumn的工作解决方案。它并不理想,因为它为每个几何列对数据库进行单独查询。 (理想情况下,应该有一种方法可以告诉DBIC只使用适当的函数来查询此字段,如果可以在不更改DBIC的情况下完成。)
答案如下。
__PACKAGE__->load_components("InflateColumn");
__PACKAGE__->inflate_column( 'geo', {
inflate => sub {
my ($value, $result) = @_;
my $dbh = $result->result_source->storage->dbh;
my $sth = $dbh->prepare( q{SELECT ST_AsEWKT(?)} );
$sth->execute( $value );
my @row = $sth->fetchrow;
return $row[0];
},
deflate => sub {
my ($value, $result) = @_;
my $dbh = $result->result_source->storage->dbh;
my $sth = $dbh->prepare( q{SELECT ST_GeomFromEWKT(?)} );
$sth->execute( $value );
my @row = $sth->fetchrow;
return $row[0];
},
});