我正在使用Doctrine在Symfony2工作。
我有一个名为Landmarks
的实体数据库,其中每个实体与1:many
实体之间存在MapMarker
关系,而MapMarker
实体的实体latitude
1}}和longitude
字段,例如“中央公园”可能是Landmark
,其中有许多“入口”,可以存储为MapMarkers
。
然后我有另一个名为Property
的实体,它与1:1
有MapMarker
的关系。
对于任何给定的Property
,找到数据库中所有附近Landmarks
的最佳方式是什么,按照最贴近地标MapMarker
排序?
在这个应用程序的旧版本中,没有Doctrine或Symfony2,我就是这样做的:
检索数据库中的所有Landmarks
对于每个Landmark
,在PHP函数中浏览每个MapMarkers
并计算P roperty's MapMarker's lat,lng
和Landmarks MapMarker's lat,lng
之间的距离。
如果任何计算出的距离小于或等于我选择的某个预定常数(比如3公里),那么我将Property
与Landmark
中的many:many
相关联{1}} relatioship。
稍后,当在数据库中查询Property's
附近的Landmarks
Landmarks
时,它只会检查链接的MapMarkers
'MapMarker
,然后再次计算最近的Property
和展示距离如下:
您所在地区的附近地标:
- 中央公园,主门 - 2.4公里
- 等
这样做的好处在于,通过在Landmark
和Landmarks
之间创建永久链接,我自动拥有了附近Landmark
的“短名单”,可供计算昂贵的距离公式。
但是,您可能已经注意到,添加新的MapMarkers
或Landmark
的{{1}}更改时会出现问题。此外,每次搜索Property
时计算距离仍然很慢(如果Properties
找到所有Landmark
,则反向计算距离。)
因为我正在迁移到Symfony2和Doctrine,所以真的希望能找到更好的方法。
有什么想法吗?
答案 0 :(得分:0)
Symfony2和Doctrine不会让你摆脱通常的数据库/ PHP约束,所以这几乎就是让你现有的逻辑适应它。
说到我的头脑,我可能会做类似的事情:
而不是制作一个包含标记数量的全新表格* X条目会导致可扩展性差,如果你问我但很明显这取决于你的应用程序限制,所以我真的不能认为这是为了你。