原则查询生成器语法错误预期 =, <, <=, <>, >, >=, !=, 得到字符串结尾



出现以下错误:

";[语法错误]第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")

最新更新