出现以下错误:
";[语法错误]第0行,第-1列:错误:应为=,<lt;=<gt>gt;=,!=,得到了字符串的末尾">
用条令querybuiler:构建这个查询
SELECT *
FROM area
WHERE ST_Contains(polygon, ST_GeomFromText('POINT(13.405584 52.510621)', 1));
(Sf4和条令2.6(
Orm配置:
orm:
dql:
numeric_functions:
ST_Contains: CrEOFSpatialORMQueryASTFunctionsMySqlSTContains
ST_GeomFromText: AppInfrastructurePersistenceDoctrineSTGeomFromText
POINT: CrEOFSpatialORMQueryASTFunctionsMySqlPoint
STGeoFromText类:
use CrEOFSpatialORMQueryASTFunctionsAbstractSpatialDQLFunction;
class STGeomFromText extends AbstractSpatialDQLFunction
{
protected $platforms = array('mysql');
protected $functionName = 'ST_GeomFromText';
protected $minGeomExpr = 1;
protected $maxGeomExpr = 2;
}
查询的构造:
use CrEOFSpatialPHPTypesGeometryPoint;
$lon = 13.405584;
$lat = 52.510621;
$qb = $this->getEntityManager()->createQueryBuilder();
$qb->select('a.name')
->from(Area::class, 'a')
->where("ST_Contains(a.polygon, ST_GeomFromText(':point', 1))")
->setParameter('point', new Point($lon, $lat), 'point');
$result = $query->getResult();
与以下错误相同:
->where("ST_Contains(a.polygon, ST_GeomFromText(:point, 1))")
请注意,不存在包装:point参数的符号。
错误来自Doctrine/OM/Query/Parser.php,它试图解析和验证查询构建。
该问题是由解析器没有"理解">ST_Contains返回布尔值,并且需要一个comparisor运算符引起的,该运算符可能是以下">=,<,<=,&llt;>,>=,!="之一。
要克服这个问题,请将= true
添加到您的条件中:
->where("ST_Contains(a.polygon, ST_GeomFromText(:point, 1)) = true")