Return 点类型 PSQL 和 DOCTRINE
Return Point type PSQL and DOCTRINE
我有一个使用 POSTGIS 点值的应用程序。我将它存储在我的位置 table 作为坐标。我可以使用 Symfony 和 doctrine 设置一个新的指向数据库的点。问题是相反的,当我试图在 symfony 上获取我不能的点时,显示给我一个空白值或空值。我得到了下一个配置文件:
Point.php:
<?php
namespace App\DBAL\Types\Geolocation;
class Point
{
private $latitude;
private $longitude;
/**
* Point constructor.
*/
public function __construct($latitude, $longitude)
{
$this->latitude = $latitude;
$this->longitude = $longitude;
}
/**
* @return mixed
*/
public function getLongitude()
{
return $this->longitude;
}
/**
* @return mixed
*/
public function getLatitude()
{
return $this->latitude;
}
}
PointType.php
<?php
namespace App\DBAL\Types\PSQL;
use App\DBAL\Types\Geolocation\Point;
use Doctrine\DBAL\Platforms\AbstractPlatform;
use Doctrine\DBAL\Types\Type;
class PointType extends Type
{
const POINT = 'point';
/**
* @param array $column
* @param AbstractPlatform $platform
* @return string
*/
public function getSQLDeclaration(array $column, AbstractPlatform $platform)
{
return "POINT";
}
/**
* @return string
*/
public function getName()
{
return self::POINT;
}
/**
* @param mixed $value
* @param AbstractPlatform $platform
* @return Point
*/
public function convertToPHPValue($value, AbstractPlatform $platform)
{
list($longitude, $latitude) = sscanf($value, 'POINT(%f %f)');
return new Point($latitude, $longitude);
}
/**
* @param mixed $value
* @param AbstractPlatform $platform
* @return string
*/
public function convertToDatabaseValue($value, AbstractPlatform $platform)
{
return $value->getLongitude() . ',' . $value->getLatitude();
}
/**
* @param string $sqlExpr
* @param AbstractPlatform $platform
* @return string
*/
public function convertToDatabaseValueSQL($sqlExpr, AbstractPlatform $platform)
{
return sprintf('PointFromText(%s)', $sqlExpr);
}
}
doctrine.yaml:
doctrine:
types:
point: App\DBAL\Types\PSQL\PointType
在我的位置文件中,我得到了 属性 坐标,如下所示:
/**
* @ORM\Column(type="point")
*/
private $coordinate;
public function getCoordinate(): Point
{
return $this->coordinate;
}
public function setCoordinate($coordinate): self
{
$this->coordinate = $coordinate;
return $this;
}
在我调用 getCoordinate 函数然后调用 getLatitude 之后,他们 return 我得到了空值。我不知道如何使用它,我尝试了在 Whosebug 上找到的各种方法,但任何人都对我有用。
已解决 - 问题出在 PointType class 上。我在数据库中看到了原始数据,它的格式是“(值,值)”。只有我需要更改的是 convertToPHPValue 方法。
之前:
list($longitude, $latitude) = sscanf($value, 'POINT(%f %f)');
之后:
list($longitude, $latitude) = sscanf($value, '(%f, %f)');
我有一个使用 POSTGIS 点值的应用程序。我将它存储在我的位置 table 作为坐标。我可以使用 Symfony 和 doctrine 设置一个新的指向数据库的点。问题是相反的,当我试图在 symfony 上获取我不能的点时,显示给我一个空白值或空值。我得到了下一个配置文件:
Point.php:
<?php
namespace App\DBAL\Types\Geolocation;
class Point
{
private $latitude;
private $longitude;
/**
* Point constructor.
*/
public function __construct($latitude, $longitude)
{
$this->latitude = $latitude;
$this->longitude = $longitude;
}
/**
* @return mixed
*/
public function getLongitude()
{
return $this->longitude;
}
/**
* @return mixed
*/
public function getLatitude()
{
return $this->latitude;
}
}
PointType.php
<?php
namespace App\DBAL\Types\PSQL;
use App\DBAL\Types\Geolocation\Point;
use Doctrine\DBAL\Platforms\AbstractPlatform;
use Doctrine\DBAL\Types\Type;
class PointType extends Type
{
const POINT = 'point';
/**
* @param array $column
* @param AbstractPlatform $platform
* @return string
*/
public function getSQLDeclaration(array $column, AbstractPlatform $platform)
{
return "POINT";
}
/**
* @return string
*/
public function getName()
{
return self::POINT;
}
/**
* @param mixed $value
* @param AbstractPlatform $platform
* @return Point
*/
public function convertToPHPValue($value, AbstractPlatform $platform)
{
list($longitude, $latitude) = sscanf($value, 'POINT(%f %f)');
return new Point($latitude, $longitude);
}
/**
* @param mixed $value
* @param AbstractPlatform $platform
* @return string
*/
public function convertToDatabaseValue($value, AbstractPlatform $platform)
{
return $value->getLongitude() . ',' . $value->getLatitude();
}
/**
* @param string $sqlExpr
* @param AbstractPlatform $platform
* @return string
*/
public function convertToDatabaseValueSQL($sqlExpr, AbstractPlatform $platform)
{
return sprintf('PointFromText(%s)', $sqlExpr);
}
}
doctrine.yaml:
doctrine:
types:
point: App\DBAL\Types\PSQL\PointType
在我的位置文件中,我得到了 属性 坐标,如下所示:
/**
* @ORM\Column(type="point")
*/
private $coordinate;
public function getCoordinate(): Point
{
return $this->coordinate;
}
public function setCoordinate($coordinate): self
{
$this->coordinate = $coordinate;
return $this;
}
在我调用 getCoordinate 函数然后调用 getLatitude 之后,他们 return 我得到了空值。我不知道如何使用它,我尝试了在 Whosebug 上找到的各种方法,但任何人都对我有用。
已解决 - 问题出在 PointType class 上。我在数据库中看到了原始数据,它的格式是“(值,值)”。只有我需要更改的是 convertToPHPValue 方法。
之前:
list($longitude, $latitude) = sscanf($value, 'POINT(%f %f)');
之后:
list($longitude, $latitude) = sscanf($value, '(%f, %f)');