如何在CakePHP ORM中处理自定义数据库类型?持久化和获取空间数据

如何在CakePHP ORM中处理自定义数据库类型?持久化和获取空间数据,orm,cakephp-3.0,Orm,Cakephp 3.0,我试着长话短说: MySQL有一段时间的空间点数据类型。要插入数据,我们需要使用insert(…)值(POINT(lon-lat)…)的表达式。为了在CakeORM中实现这一点,我们需要将给定的属性设置为newqueryexpression(“POINT($lon,$lat)”)和CakePHP将在保存实体时处理数据绑定 现在我想做的是让实体具有GeoJSON Point类型的属性(字段),该属性对应于Point类型的Mysql列,并且能够在db中存储和获取实体 我在保存之前使用过回电,方式如下

我试着长话短说:

MySQL有一段时间的空间
数据类型。要插入数据,我们需要使用
insert(…)值(POINT(lon-lat)…)
的表达式。为了在CakeORM中实现这一点,我们需要将给定的属性设置为
newqueryexpression(“POINT($lon,$lat)”)
和CakePHP将在保存实体时处理数据绑定

现在我想做的是让实体具有GeoJSON Point类型的属性(字段),该属性对应于
Point
类型的Mysql列,并且能够在db中存储和获取实体

我在保存之前使用过
回电,方式如下:

public function beforeSave(Event $event, \Cake\Datasource\EntityInterface $entity, ArrayObject $options) {
    $coords = $entity->position->getCoordinates();
    $entity->position = new \Cake\Database\Expression\QueryExpression('POINT(' . $coords[0] . ',' . $coords[1] . ')');
}
其中,
$entity->position
的类型为
Point
(附加库,但可以是任何库)。这在一般情况下有效,但会修改实际实体,所以如果我这样做的话

$entity->position=new Point(5,10);
$table->save($position);
$entity->position // <- this will be Query expression insteed of Point(5,10);
$entity->position=新点(5,10);
$table->save($position);
$entity->position//