Я собираю искатель магазина, который работает на расстоянии от почтового индекса. Я делал это много раз, используя стандартные запросы и QoQ, но теперь пытался соединить их, используя cf9 ORM ... но, похоже, достиг предела моих возможностей с последним битом.
Я вытаскиваю сущность и обрабатываю ее. В конце мне нужно:
а. Удалить запись, если она не соответствует определенным критериям (расстояние больше указанного пользователем)
ИЛИ б. Добавьте новое свойство к записи, чтобы сохранить расстояние.
Итак, в конце все, что мне нужно в моей сущности, это те магазины, которые находятся в пределах диапазона, указанного пользователем, с каждой записью, содержащей вычисленное расстояние.
Лучший способ увидеть, что я пытаюсь сделать, это просмотреть полную функцию
Любые предложения с благодарностью !!
public function getByPostcodeRadius(required postcode="",
required radius=""){
//set some initial vals
rs = {};
geo = New _com.util.geo().init();
local.postcodeGeo = geo.getGeoCode("#arguments.postcode#, Australia");
local.nearbyStores = "";
local.returnStores = {};
//load stores
local.stores = entityload("stores");
//loop over all stores and return list of stores inside radius
for(i=1; i <= ArrayLen(local.stores); i++){
store = {};
store.id = local.stores[i].getID();
store.geoCode = local.stores[i].getGeoCode();
store.Lat = ListgetAt(store.geoCode,1);
store.Lng = ListgetAt(store.geoCode,2);
distance = geo.getDistanceByGeocode(local.postcodeGeo.Lat,local.postcodeGeo.Lng,store.Lat,store.Lng);
//************************
//HERE IS WHERE I AM STUCK.
if (distance LT arguments.radius){
//here I need to add a property 'distance' and set it's value
local.stores[i].distance = distance; // this adds it to the object, but not with the PROPERTIES
} else {
// here i need to remove the store from the object as it's distance was greater than the one passed in
arrayDeleteAt(local.stores,i); //this clearly isn't working, as positions are changing with each loop over
}
}
return local.stores;
}