我正在尝试在查询中使用PostGIS功能。我正在使用jsor/doctrine-postgis
包向Doctrine添加相关功能。我不确定我是否错误地配置了它或者我做错了什么。
例如:
->where('ST_Intersects(st.coords,ST_MakeEnvelope(-1,-1,1,1,4326))')
但是这不起作用,因为语法检查程序需要比较运算符。我收到以下错误:
错误:预期=,<,< =,<>,>,> =,!=,得到字符串结尾
我设法通过检查true / false来避免此错误。虽然这是不可取的,但它确实有效。
- 化合物其中(' ST_Intersects(st.coords,ST_MakeEnvelope(-1,-1,1,1,4326))=真&#39)
但我想使用&&
运算符。我不确定我该如何管理呢?我的意思是这样的:
->where('st.coords && ST_MakeEnvelope(-1,-1,1,1,4326))')
但这会返回错误:
错误:预期=,<,< =,<>,>,> =,!=,得到'&'
我做错了吗?由于某种原因,这感觉过于复杂了?
答案 0 :(得分:1)
它是known bug。你无能为力。来自jsor,作者
AFAICT,使用Doctrine来实现自定义操作符是不可能的:(我不认为我可以在这里做很多事情。我唯一知道的解决方案是使用Doctrine's Native SQL feature。现在。如果您有其他问题/想法,请随时重新开启。
因此,如果您想使用GIST索引->createNativeQuery
geometry_overlaps
if you don't care.
答案 1 :(得分:0)
您应该在以下位置的末尾添加“ = 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()
;
}