2010-11-30 2 views
2

여행 hasMany의 다리찾기() 일치하는 각 필드 중 하나 CakePHP의

공항은 내가 CakePHP를 사용하여 각 목적지 공항의 저렴한 여행을 찾을 수있는 방법에는 협회

이 없다?

지금 당장 할 수있는 일은 공항 배열을 통해 foreach하는 것입니다. 이것은 데이터베이스에 수백 개의 쿼리를 요구할 것입니다. (필자가 생각한 가장 빠른 방법은 아닙니다.)

function getCheapestTrip($origin){ 

$airports=$this->Airport->getAirports(); 
foreach($airports as $airport): 
$cheapest_flights=$this->Trip->find('first', 
array(
'conditions'=>array('Leg.origin'=>$origin, 'MIN(Trip.price) as price'), 
'fields'=>array('Trip.origin','price','Leg.destination','Leg.depart','Leg.arrive'), 
'recursive'=>2, 
)); 
endforeach; 
} 
} 

또한,이 데이터 유형의 물건이 CakePHP의 규칙에 따라 모델 (지방 모델, 마른 체형의 컨트롤러)에 있어야한다고 생각합니다. loadModel을 사용할 수있는 getAirports와 같은 다른 모델의 함수를 호출하기 위해 읽었지 만 CakePHP의 컨트롤러 메소드 섹션에서이를 발견했습니다. 다른 모델의 데이터/모델 기능을 다른 모델에 어떻게 가져 가야합니까?

감사합니다.

+0

제공 한 코드에서 $ 공항을 반복하지만 어디에서도 $ 공항을 사용하지 않습니다. 동일한 쿼리를 반복해서 실행하고 있습니다. 상태가 누락 되었습니까? – RabidFire

+0

그래, 내가 게시 한 코드는 확실히 출발점이며 이전에 게시했을 때 지쳤다. 나는이 물건을 다시 찾아 내려고 시도 할 것이고, 그것을 얻을 수 없다면 다른 것을 게시/편집 할 것입니다. 댓글 주셔서 감사합니다. – JohnAllen

답변

0

두 번째 질문에 대한 답변은 "다른 모델에서 모델을로드하는 방법"입니다. here을 찾을 수 있습니다.

0

더 나은 알고리즘 강점을 찾고 있다면 지금 해결책이 없습니다.

광산은 기본적으로 목적지 공항에 필드를 추가해야합니다.이 필드는 새 항공편을 추가 할 때마다 업데이트되어 목적지 정보에 직접 정보를 갖게됩니다.

귀하의 문제를 이해했으면 나타납니다. 나는 영어 아니에요 그래서

0

당신이 해결하는 문제는 외판원 문제입니다 (그것이 신체의 일부 나에) 여행에 관련된 "다리"의 의미에 익숙하지 않다 : http://en.wikipedia.org/wiki/Travelling_salesman_problem

Google지도에서 어떻게 읽었는지에서 가장 일반적인 경로와 연결을 사전 계산하고 싶을 것입니다. 그 미리 계산 된 정보를 값싼 캐시에 보관하십시오 (memcache prolly). 기본적으로 매번 다시 계산할 수 없으므로 몇 가지 일반적인 계산을 수행하고 사전 계산 된 캐시를 작성하십시오.

WRT 알고리즘, 일부 Google 검색 팁과 트릭을 당신의 친구가 될 것입니다. 이 문제는 여러 번 해결되었습니다 (아무도 정확하게 계산 상 효율적이지 않으므로 사전 계산 및 캐시해야합니다).

+0

저는 실제로 고유 한 목적지를 찾으려고합니다. 같은 origin_airport에서 각 가능한 목적지에 그냥 가장 저렴한 항공편을 찾으십시오. 문제를 제대로 설명하지 못했습니다. 부분적으로 그것은 나를 위해 어려운 것이기 때문에. – JohnAllen