1

PostGISが有効になっているPostgreデータベースでDoctrine2でSymfonyを使用しています。次の構造を持つプロパティと近隣の2つのテーブルがあります。

class Property  {

/**
 * @ORM\Id
 * @ORM\Column(type="integer")
 * @ORM\GeneratedValue(strategy="AUTO")
 */
protected $id;

/**
 * @ORM\Column(type="string")
 */
protected $address;

/**
 * @var Point $geom
 * @ORM\Column(type="Point", nullable=true)
 */
protected $geom;
}

class Neighborhood  {

/**
 * @ORM\Id
 * @ORM\Column(type="integer")
 * @ORM\GeneratedValue(strategy="AUTO")
 */
 protected $gid;

 /**
 * @ORM\Column(type="string")
 */
 protected $name;

 /**
 * @ORM\Column(type="string")
 */     
 protected $description;

 /**
 * @var Polygon $geom
 *
 * @ORM\Column(type="Polygon", nullable=true)
 */
 protected $geom;
 }

pgAdminIII では、正常に動作する次のクエリを記述できます。

SELECT address, neighborhood.name
FROM property
JOIN neighborhood
ON ST_Contains(neighborhood.geom, property.geom)

これをDQLでどのように記述できますか?結合の基本と Doctrine2 マッピングの注釈の追加は理解していますが、2 つのフィールドが等しくないため結合の方法がわかりません。結合を作成するには、ST_Contains 関数を使用する必要があります。空間データ型とマッピングに djlambert / doctrine2-spatial バンドルを使用しています。各テーブルを個別にクエリして、それぞれにマップを作成できますが、特定の近隣のすべてのプロパティを選択する方法がわかりません。

4

2 に答える 2

3

私はこれを理解し、他の誰かが同様の質問をした場合に備えて投稿したいと思います. 関数だけでなく、ST_Contains を条件の一部にする必要がありました。

createQueryBuilder を使用する場合の構文は次のとおりです。

 $qb = $this->createQueryBuilder('n')              
            ->select("p.address as address, n.ntaname, ST_AsText(p.geom) as function")                
            ->join('Bundle\Entity\Property', 'p', 'WITH', 'ST_Contains(n.geom4326,p.geom)=true');        


    return $qb->getQuery()
                    ->getResult();
于 2014-01-16T01:56:21.937 に答える