Две таблицы, с правильной настройкой в CakePHP:
Свойство (…, postcode_id , …) и почтовый индекс ( id , почтовый индекс, широта, долгота).
Виртуальное поле, созданное в Property beforeFind (), вычисляет расстояние между почтовым индексом поиска и почтовым индексом записи. Поэтому, чтобы получить lat / long, мне нужно получить запись из таблицы Postcode внешним ключом в записи Property, все в объявлении виртуального поля.
Как я могу это сделать? Несколько вложенных элементов SELECT? Вложенная find (), которая, вероятно, будет хуже? Я думал, что просто использовать relatedModel.fieldName будет работать – это не так.
EDIT: свойство принадлежит для почтового индекса, почтовый индекс hasMany Property
(Использование cakephp v2.4.4)
Виртуальное поле в свойстве beforeFind ():
$this->virtualFields['distance'] = 6371 . ' * ACOS( (SIN(RADIANS(Postcode.latitude)) * ' . $searchPostcode['latitudeSin'] . ') + (COS(RADIANS(Postcode.latitude)) * ' . $searchPostcode['latitudeCos'] . ') * COS(RADIANS(Postcode.longitude) - ' . $searchPostcode['longitude'] . ') )';