2016-03-25 17 views
1

Aşağıdaki yerel sql sorgusunu kullanarak çokgenin içinde gelen siteleri getiriyorum. Ve bana site kimliklerinin sayısını veriyor.Mysql yerel sql sorgusu alma gibi doktrin sorgusundan beklenen çıktısı almadım, doctrine2-spatial uzantısını kullanıyorum

SELECT s.siteID from Sites s where st_contains((SELECT polygon from Region where RegionId=9) , point(s.latitude,s.longitude))=1 ; 

Ama doktrinle aynı şeyi yaparken, bana boş bir dizi veriyor. Bu konuda 1 gün daha geçirdikten sonra çıkış

CrEOF\Spatial\PHP\Types\Geometry\Polygon Object 
(
[rings:protected] => Array 
    (
     [0] => Array 
      (
       [0] => Array 
        (
         [0] => 48.806863 
         [1] => 17.050781 
        ) 

       [1] => Array 
        (
         [0] => 47.813155 
         [1] => 17.116699 
        ) 

       [2] => Array 
        (
         [0] => 47.457809 
         [1] => 16.765137 
        ) 

       [3] => Array 
        (
         [0] => 46.920255 
         [1] => 16.237793 
        ) 

       [4] => Array 
        (
         [0] => 46.664517 
         [1] => 15.666504 
        ) 

       [5] => Array 
        (
         [0] => 46.589069 
         [1] => 14.47998 
        ) 

       [6] => Array 
        (
         [0] => 47.249407 
         [1] => 14.282227 
        ) 

       [7] => Array 
        (
         [0] => 47.635784 
         [1] => 14.677734 
        ) 

       [8] => Array 
        (
         [0] => 48.210032 
         [1] => 15.578613 
        ) 

       [9] => Array 
        (
         [0] => 48.618385 
         [1] => 15.864258 
        ) 

       [10] => Array 
        (
         [0] => 48.748945 
         [1] => 16.721191 
        ) 

       [11] => Array 
        (
         [0] => 48.806863 
         [1] => 17.050781 
        ) 

      ) 

    ) 

[srid:protected] => 
) 

cevap

0

aşağıdaki

$queryBuilder = $this->createQueryBuilder('s'); 
    $queryBuilder 
     ->where('ST_Contains(:polygon, point(s.latitude, s.longitude)) = 1') 
     ->setParameter('polygon', $region->getPolygon()); 
    print_r($queryBuilder->getQuery()->getResult()); 

$ bölge-> getPolygon() Beni verilmesi, ben sorunu buldum. setParameter() üçüncü parametreye sahiptir, parametre tipini söyleyebiliriz.

->setParameter('polygon', $region->getPolygon()); 

burada :polygon veri türü değil dize poligon oldu.

Aşağıdaki şekilde yapabilirsiniz.

$queryBuilder = $this->createQueryBuilder('s'); 
$queryBuilder 
    ->where('ST_Contains(:polygon, point(s.latitude, s.longitude)) = 1') 
    ->setParameter('polygon', $region->getPolygon(), 'polygon'); 
print_r($queryBuilder->getQuery()->getResult()); 

tam olarak anahtar veri türü 'poligon' için ne bilmiyorsanız

olduğunu. Ardından eklenen tüm datayp'ların listesini almak için print_r(Type::getTypesMap()); kullanın. Benim durumumda

o

Array 
(
    [array] => Doctrine\DBAL\Types\ArrayType 
    [simple_array] => Doctrine\DBAL\Types\SimpleArrayType 
    [json_array] => Doctrine\DBAL\Types\JsonArrayType 
    [object] => Doctrine\DBAL\Types\ObjectType 
    [boolean] => Doctrine\DBAL\Types\BooleanType 
    [integer] => Doctrine\DBAL\Types\IntegerType 
    [smallint] => Doctrine\DBAL\Types\SmallIntType 
    [bigint] => Doctrine\DBAL\Types\BigIntType 
    [string] => Doctrine\DBAL\Types\StringType 
    [text] => Doctrine\DBAL\Types\TextType 
    [datetime] => Doctrine\DBAL\Types\DateTimeType 
    [datetimetz] => Doctrine\DBAL\Types\DateTimeTzType 
    [date] => Doctrine\DBAL\Types\DateType 
    [time] => Doctrine\DBAL\Types\TimeType 
    [decimal] => Doctrine\DBAL\Types\DecimalType 
    [float] => Doctrine\DBAL\Types\FloatType 
    [binary] => Doctrine\DBAL\Types\BinaryType 
    [blob] => Doctrine\DBAL\Types\BlobType 
    [guid] => Doctrine\DBAL\Types\GuidType  
    [geometry] => CrEOF\Spatial\DBAL\Types\GeometryType 
    [point] => CrEOF\Spatial\DBAL\Types\Geometry\PointType 
    [polygon] => CrEOF\Spatial\DBAL\Types\Geometry\PolygonType 
    [linestring] => CrEOF\Spatial\DBAL\Types\Geometry\LineStringType 
) 
oldu