两个表,在 Cakephp 中正确设置了关系:
属性(...、postcode_id、...)和邮政编码(id、邮政编码、纬度、经度)。
在 Property beforeFind() 中创建的虚拟字段计算搜索邮政编码与记录邮政编码之间的距离。因此,要获取纬度/经度,我需要通过属性记录中的外键从邮政编码表中检索记录,所有这些都在虚拟字段声明内。
我该怎么做?嵌套多个 SELECT?嵌套 find(),哪个可能会更糟?我认为只使用RelatedModel.fieldName 就可以了 - 但事实并非如此。
编辑:属性属于邮政编码,邮政编码有许多属性
(使用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'] . ')
)';
最佳答案
您需要在要搜索的表和保存 lng/lat 的表之间进行手动连接,例如 $options['joins'] = array(array('table' => ' model2', 'alias' => 'Model2', 'conditions' => array('Model2.model1_id = Model1.id')));然后在您的虚拟领域中,我认为您应该能够使用 Model2.lat 和 Model2.lng 并使其正常工作。
关于php - 在虚拟字段中访问多个外部字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21463804/