Имея следующую ошибку:
«[Синтаксическая ошибка], строка 0, столбец -1: ошибка: ожидается =, <, <знак равно <>,>,> =,! =, получил конец строки. «
построение этого запроса с помощью доктрины querybuiler:
SELECT *
FROM area
WHERE ST_Contains(polygon, ST_GeomFromText('POINT(13.405584 52.510621)', 1));
(Sf4 и Доктрина 2.6)
Orm config:
orm:
dql:
numeric_functions:
ST_Contains: CrEOF\Spatial\ORM\Query\AST\Functions\MySql\STContains
ST_GeomFromText: App\Infrastructure\Persistence\Doctrine\STGeomFromText
POINT: CrEOF\Spatial\ORM\Query\AST\Functions\MySql\Point
Класс STGeoFromText:
use CrEOF\Spatial\ORM\Query\AST\Functions\AbstractSpatialDQLFunction;
class STGeomFromText extends AbstractSpatialDQLFunction
{
protected $platforms = array('mysql');
protected $functionName = 'ST_GeomFromText';
protected $minGeomExpr = 1;
protected $maxGeomExpr = 2;
}
Построение запроса:
use CrEOF\Spatial\PHP\Types\Geometry\Point;
$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 / ОРМ / Query / Parser.php, который пытается проанализировать и проверить сборку запроса.
Проблема вызвана тем, что этот парсер не «понимает», что ST_Contains возвращает логическое значение и ожидает оператор сравнения какзнак равно <, <знак равно <>,>,> =,! =».
Чтобы преодолеть это, добавьте = true
к вашему состоянию:
->where("ST_Contains(a.polygon, ST_GeomFromText(:point, 1)) = true")
Других решений пока нет …