我试图在查询中使用后gis函数。我正在使用jsor/doctrine-postgis
软件包来为学说添加相关功能。我不确定是否对其进行了错误的配置或是否做错了事。
例如:
->where('ST_Intersects(st.coords,ST_MakeEnvelope(-1,-1,1,1,4326))')
但是,这是不起作用的,因为语法检查器需要比较操作员。我收到以下错误:
错误:Expect =,<,< =,<>,>,> =,!
我通过检查True/false设法避免了此错误。虽然这是不可取的,但它起作用。
->其中('st_intersects(st.coords,st_makeenvelope(-1,-1,-1,1,1,4326)))= true')
,但我想使用&&
操作员。我不确定该如何管理?我的意思是这样的事情:
->where('st.coords && ST_MakeEnvelope(-1,-1,1,1,4326))')
但这返回错误:
错误:Expection =,<,< =,<>,>,> =,!=,get'&'
我做错了什么吗?由于某种原因,这感觉过于复杂吗?
这是一个已知的错误。您无能为力。来自JSOR,作者
afaict,通过学说无法实施自定义操作员:(我认为我在这里做不到。我知道的唯一解决方案是使用学说的本机SQL功能。现在关闭。如果您有其他问题/想法。
因此,您唯一的选择是->createNativeQuery
,如果您想使用要点索引,或者如果不在乎,则geometry_overlaps
。
您应该在其中添加" = true":
/**
* @param string $bbox
* @param int|null $limit
* @return MyEntity[]
*/
public function findByCoordinatesBoundingBox(string $bbox, int $limit = null): array
{
return $this->createQueryBuilder('n')
->where("ST_Intersects(n.coordinates, ST_MakeEnvelope({$bbox})) = true")
->orderBy('n.id', 'ASC')
->setMaxResults($limit)
->getQuery()
->getResult()
;
}