簡體   English   中英

預期的學說查詢構建器語法錯誤 =, <, <=, <>, >, >=, !=, got end of string

[英]doctrine querybuilder syntax error expected =, <, <=, <>, >, >=, !=, got end of string

出現以下錯誤:

“[語法錯誤] 第 0 行,第 -1 行:錯誤:預期 =、<、<=、<>、>、>=、!=,已結束字符串。”

使用學說 querybuiler 構建此查詢:

SELECT * 
FROM area 
WHERE ST_Contains(polygon, ST_GeomFromText('POINT(13.405584 52.510621)', 1));

(Sf4 和教義 2.6)

奧姆配置:

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/ORM/Query/Parser.php ,它試圖解析和驗證查詢構建。

該問題是由解析器不“理解” ST_Contains返回布爾值並期望比較運算符引起的,比較運算符可以是以下“ =、<、<=、<>、>、>=、!= ”之一。

為了克服這個問題,請在您的條件中添加= true

->where("ST_Contains(a.polygon, ST_GeomFromText(:point, 1)) = true")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM