2010-08-18 1 views
0

비즈니스를 나열하는 CakePHP에 응용 프로그램이 있습니다. 비즈니스 모델/컨트롤러와 state_list 모델/컨트롤러가 있습니다. 그러나 사용자가 주 페이지를 클릭하면 특정 주에있는 모든 도시가 나열됩니다.
그런 다음 특정 도시를 클릭하면 모든 비즈니스를 나열하는 페이지가 표시됩니다 그 특별한 도시에서.

모든 도시 목록의 데이터베이스 테이블이 없으면 어떻게 할 수 있습니까?CakePHP에 데이터베이스가없는 도시 목록

+0

무엇 데이터베이스 구조가 현재처럼 보이나요? 사업체가 위치한 도시/주를 어떻게 결정합니까? – deceze

+0

비즈니스 테이블 : ID, 이름, 주소, 도시, state_id, 우편 번호, 국가, url; 상태 테이블 : ID, 이름, 약어. 주 정부 페이지를 열거 할 때 주정부 ID가있는 모든 업체를 확보 할 수 있습니다. 나는 똑같은 일을하지 않고도시 목록에 올리는 법을 모른다. – xtine

답변

2

는 이러한 목적을 위해 더 나은 데이터베이스 구조는 다음의 라인을 따라 뭔가 될 것이다 :

Table: Location 
id 
parent_id 
name 
type 

Table: Business 
id 
location_id 
... 

귀하의 도시와 국가가 형성해야 tree :

Business (..., location_id => 5, ...) 
Location (id => 5, parent_id => 2, name => San Francisco, type => city) 
Location (id => 2, parent_id => ..., name => California, type => state) 
: 예를 들어

America 
    California 
     San Francisco 
    New York 
     ... 
Japan 
    Tokyo 
     ... 

그런 식으로 각 사업체는 도시에 속해 있으며 암묵적으로 국가에 속합니다. 그리고 나라도 좋은 이드를 가지고 있습니다. 또한 캘리포니아 주 뉴욕에있는 사업을하는 데 실수를 할 수 없습니다 (현재 가능합니다).

을 감안할 때 당신은 이름 검색을 통해 도시를 필터링 할 수 있습니다 무엇을 :

$listOfBusinessesInState = $this->Business->find('all', array(
    'conditions' => array('Business.state_id' => $state_id), 
    'fields'  => array('Business.city'), 
    'group'  => array('Business.city') 
)); 
$listOfCitiesInState = Set::extract('/Business/city', $listOfBusinessesInState); 
+0

감사합니다. 이것은 내가 필요한 충고입니다. 나는 다른 나라들까지도 확장시켜야 할 것이므로 위치를 어떻게 처리하는지 다시 생각해야 할 것입니다. 나는 비즈니스를 추가 할 때 해당 주/국가에있는 도시가 존재하는지 확인하고, 그렇지 않으면 테이블에 추가 할 것이라고 가정합니다. – xtine

+0

@xtine. 당신은 철자 변종에 대한 중복 생성에 대해주의해야합니다. 그러므로 인터페이스 방식으로 드롭 다운 목록 (1. 국가 선택, 국가 선택 ...)을 사용하거나 자동 완성 또는 일부를 수행 할 수 있습니다. – deceze

+0

최신 트리 기반 버전에 대한 위치 정보를 가지고있는 현재의 방법으로 데이터베이스 마이그레이션 스크립트에 대해 제안 해주십시오. 그리고 일단 트리 기반 버전이 내 마음 속으로 퍼지게되면 자동 완성 드롭 다운을 가질 생각입니다. :) – xtine