如何在CodeIgniter 2中扩展Doctrine 2来处理MySQL空间(“点”字段类型)?

时间:2011-05-06 01:41:46

标签: mysql codeigniter orm doctrine geospatial

我正在使用CodeIgniter 2编写一个网站作为我的框架,我最近开始尝试将Doctrine 2用于ORM。

我的数据库需要存储空间数据(例如“点”类型的列),显然Doctrine无法处理开箱即用的数据。

我在互联网上搜索过,只发现了这些提示:http://codeutopia.net/blog/2011/02/19/using-spatial-data-in-doctrine-2/

但该文章尚不清楚保存这些文件的位置以及需要配置的其他内容。我尝试联系作者,但从未收到过回复。

有人可以帮忙吗?

谢谢! 莱恩

2 个答案:

答案 0 :(得分:1)

很久以前所以我忘记了一些细节,但是我将这4个文件放在一个名为CodeIgniter / application / libraries / Doctrine / CustomAddon的文件夹中:

  • Distance.php
  • Point.php
  • PointStr.php
  • PointType.php

我将每个名称空间设置为“CustomAddon”。

然后在CodeIgniter / applications / libraries / Doctrine.php的底部我放了:

require_once APPPATH . 'libraries/Doctrine/CustomAddon/Distance.php';
require_once APPPATH . 'libraries/Doctrine/CustomAddon/Point.php';
require_once APPPATH . 'libraries/Doctrine/CustomAddon/PointStr.php';
require_once APPPATH . 'libraries/Doctrine/CustomAddon/PointType.php';
Doctrine\DBAL\Types\Type::addType('point', 'CustomAddon\PointType');
//Assuming $config is a Doctrine\ORM\Configuration object used to configure the EM
$config->addCustomNumericFunction('DISTANCE', 'CustomAddon\Distance');
$config->addCustomNumericFunction('POINT_STR', 'CustomAddon\PointStr');

// Create EntityManager
$this->em = EntityManager::create($connectionOptions, $config);

然后用法看起来像这样:

$point = new \CustomAddon\Point($geo['lat'], $geo['lon']);

答案 1 :(得分:0)

我使用的是学说1.2,所以我不知道这是否适合你。使用1.2.4,您可以在yaml或模型中声明一个点类型,并且它可以很好地转换为数据库。要将数据保存为Point,您需要创建一个新的学说表达式,如下所示:

$phone->point = new Doctrine_Expression("GEOMFROMTEXT('POINT(25 10)')");

当然,您需要的数据代替那些25和10。使用doctrine 1.2.4,这将正常工作并将数据保存在数据库中。要检索数据,您只需使用这种选择语句:

$query = Doctrine_Query::create()
         ->select ('X(p.point), Y(p.point)')
         ->from('Points p');

你将有一个名为point的数组,在你的对象中有两个元素(x和y)。正如我所说的,我使用1.2.4,但是如果有一种简单的方法来处理该版本中的点,类似的东西必须与学说2一起工作。祝你好运!