3

我想执行一个使用 PostGIS 包的自定义 SQL 函数的查询。例如,我可以使用 psql 运行后续查询:

SELECT * FROM places 
WHERE earth_box(ll_to_earth(40.6333125,-8.659492), 20)
@> ll_to_earth(places.lat, places.lng);

ll_to_earth并且earth_box是 PostGIS 函数。如何使用 Diesel 的这些值latlng作为输入进行此查询?

我浏览了文档,但我无法理解它。

4

2 回答 2

7

这是我最终得到的解决方案:

pub fn get_near(lat: f32, lng: f32, conn: &PgConnection) -> Vec<Places> {
    diesel::sql_query("SELECT * FROM places WHERE earth_box(ll_to_earth($1,$2), 20) @> ll_to_earth(places.lat, places.lng)")
        .bind::<diesel::sql_types::Float, _>(lat)
        .bind::<diesel::sql_types::Float, _>(lng)
        .load(conn)
        .expect("An error has occured")
}
于 2018-12-03T21:15:26.197 回答
1

在 Diesel 文档中搜索function直接导致sql_function宏:

Diesel 仅提供对极少数 SQL 函数的支持。此宏使您能够添加来自 SQL 标准的附加函数,以及您的应用程序可能具有的任何自定义函数。

于 2018-12-03T15:44:13.880 回答