, , Doctrine 2 ( 2. 2+) Postgis. , - PHP, :
http://web.archive.org/web/20161118060448/http://blog.fastre.info:80/2012/02/doctrine2-2-2-et-types-geographiques/
, :
- geojson postgis (json php json_decode)
- Point
:
- Point WKT. WKT, JSON? Postgis ST_GeogFromWKT, () ST_GeogFromGeoJson.
- .
DQL, "" DQL-. , , .
namespace Progracqteur\WikipedaleBundle\Resources\Doctrine\Functions;
use Doctrine\ORM\Query\AST\Functions\FunctionNode;
use Doctrine\ORM\Query\Lexer;
class Covers extends FunctionNode {
private $polygon = null;
private $point = null;
public function getSql(\Doctrine\ORM\Query\SqlWalker $sqlWalker) {
return 'ST_Covers('.$this->polygon->dispatch($sqlWalker).', '.$this->point->dispatch($sqlWalker).')';
}
public function parse(\Doctrine\ORM\Query\Parser $parser) {
$parser->match(Lexer::T_IDENTIFIER);
$parser->match(Lexer::T_OPEN_PARENTHESIS);
$this->polygon = $parser->StringExpression();
$parser->match(Lexer::T_COMMA);
$this->point = $parser->StringPrimary();
$parser->match(Lexer::T_CLOSE_PARENTHESIS);
}
}
app/config/config.yml:
dql:
string_functions:
covers: Progracqteur\WikipedaleBundle\Resources\Doctrine\Functions\Covers
: , , 'ST_FromWKT', WKT getSql ( __toString?). , , .
: ($entity-> getPolygon() postgis - - angular .)
$em->createQuery('SELECT p from MyEntity p where covers(:polygon, p.geom) = true)
->setParameter('polygon', $entity->getPolygon());