Doctrine2中配置原生Point PostgreSQL类型
问题:Doctrine2中配置原生Point PostgreSQL类型 尝试使用 Postgres 进行与此处相同的操作: http://codeutopia.net/blog/2011/02/19/using-spatial-data-in-doctrine-2/ 我对“convertToDatabaseValue”函数有疑问(请参见此处:http://doctrine-dbal.readthe
·
问题:Doctrine2中配置原生Point PostgreSQL类型
尝试使用 Postgres 进行与此处相同的操作:
http://codeutopia.net/blog/2011/02/19/using-spatial-data-in-doctrine-2/
我对“convertToDatabaseValue”函数有疑问(请参见此处:http://doctrine-dbal.readthedocs.org/en/latest/reference/types.html#custom-mapping-types)
我的自定义类型:
use Doctrine\DBAL\Types\Type;
use Doctrine\DBAL\Platforms\AbstractPlatform;
class PointType extends Type
{
const POINT = 'point';
public function getSqlDeclaration(array $fieldDeclaration, AbstractPlatform $platform)
{
return 'POINT';
}
public function convertToPHPValue($value, AbstractPlatform $platform)
{
return new Point($value[0],$value[1]);
}
public function convertToDatabaseValue($value, AbstractPlatform $platform)
{
return "'".$value->getLongitude().','.$value->getLatitude()."'";
}
public function getName()
{
return self::POINT;
}
}
Manualy,我可以使用以下 SQL 插入这一点:
INSERT INTO points (pointtype,name,score) VALUES ('2.43145,42.84214',"My Place",3241)
但是教义 DBAL 创建了以下代码:
'INSERT INTO points (pointtype,name,score) VALUES (?,?,?)' with params ["'2.43145,42.84214'","My Place",3241]
-> 我的观点被解释为一个字符串...
我可以避免吗?
注意:我不想使用 PostGIS,只使用 PostgreSQL 的原生点
解答
这是因为你只需要返回字符串,Doctrine 会自动用引号括起来。试试这个代码:
public function convertToDatabaseValue($value, AbstractPlatform $platform)
{
return $value->getLongitude().','.$value->getLatitude();
}
它将为您生成下一个 SQL 查询:
INSERT INTO points (pointtype,name,score) VALUES ("2.43145,42.84214","My Place",3241)
更多推荐
已为社区贡献19912条内容
所有评论(0)