【发布时间】:2014-01-30 17:48:08
【问题描述】:
两张表,在 Cakephp 中正确设置了关系:
属性(...、postcode_id、...)和邮政编码(id、邮政编码、纬度、经度)。
在属性 beforeFind() 中创建的虚拟字段计算搜索邮政编码和记录邮政编码之间的距离。因此,要获取纬度/经度,我需要通过 Property 记录中的外键从 Postcode 表中检索一条记录,所有这些都在虚拟字段声明中。
我该怎么做?多个 SELECT 嵌套在其中?嵌套的 find(),这可能会更糟?我认为只使用 RelatedModel.fieldName 就可以了 - 它没有。
编辑:Property belongsTo Postcode, Postcode hasMany Property
(使用 cakephp v2.4.4)
Property beforeFind() 中的虚拟字段:
$this->virtualFields['distance'] = 6371 . ' * ACOS(
(SIN(RADIANS(Postcode.latitude)) * ' . $searchPostcode['latitudeSin'] . ') +
(COS(RADIANS(Postcode.latitude)) * ' . $searchPostcode['latitudeCos'] . ') *
COS(RADIANS(Postcode.longitude) - ' . $searchPostcode['longitude'] . ')
)';
【问题讨论】:
-
这并不能直接回答您的问题,但您是否查看过 behavior 的面包店,您可以利用它来解决邮政编码的距离问题
-
谢谢,但我不确定需要做多少工作才能兼容 CakePHP 2。无论哪种方式,我都希望我可以在这里使用更通用的东西来处理任何有此问题的计算字段,而不仅仅是地理字段。
标签: php mysql cakephp foreign-keys cakephp-2.4