我正在使用CodeIgniter 2编写一个网站作为我的框架,我最近开始尝试将Doctrine 2用于ORM。
我的数据库需要存储空间数据(例如“点”类型的列),显然Doctrine无法处理开箱即用的数据。
我在互联网上搜索过,只发现了这些提示:http://codeutopia.net/blog/2011/02/19/using-spatial-data-in-doctrine-2/
但该文章尚不清楚保存这些文件的位置以及需要配置的其他内容。我尝试联系作者,但从未收到过回复。
有人可以帮忙吗?
谢谢! 莱恩
答案 0 :(得分:1)
很久以前所以我忘记了一些细节,但是我将这4个文件放在一个名为CodeIgniter / application / libraries / Doctrine / CustomAddon的文件夹中:
我将每个名称空间设置为“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一起工作。祝你好运!