有没有什么办法可以在Perl的DBIx :: Class中使用SQL函数来过滤列?

我正在使用带有PostGIS几何列的PostgreSQL数据库。有没有什么办法可以在Perl的DBIx :: Class中使用SQL函数来过滤列?

我想配置Result类,以便使用ST_AsEWKT函数对几何列进行充气,并使用ST_GeomFromEWKT函数对其进行压缩。

有没有办法做到这一点,以便“find”方法正常工作,并且“update”和“create”方法也能正常工作。我宁愿不必为每个表编写专门的查询,如果我能避免它。

我可以使用hack来为列充气,

__PACKAGE__->inflate_column('geo', { 

inflate => sub {

my ($raw_value, $result) = @_;

my $col = $result->result_source->resultset->get_column("geo")->func("ST_AsEWKT");

},

});

但我不确定如何实施通缩。

在此先感谢。

回答:

我有一个使用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];

},

});

以上是 有没有什么办法可以在Perl的DBIx :: Class中使用SQL函数来过滤列? 的全部内容, 来源链接: utcz.com/qa/259549.html

回到顶部