2010-08-18 52 views
0

我在CakePHP中有一個列出業務的應用程序。我有一個商業模型/控制器,以及一個state_list模型/控制器。然而,我想要更加詳細,所以當用戶點擊國家頁面時,它會列出該國家所在城市的所有企業所在的城市。
然後,當他們點擊某個城市時,它會顯示一個列出所有企業的頁面在那個特定的城市。

如果沒有所有城市列表的數據庫表,我該如何做到這一點?沒有在CakePHP中的數據庫中列出城市

+0

什麼是你的數據庫結構目前是什麼樣子?你如何確定一個企業在哪個城市/州? – deceze 2010-08-18 07:46:50

+0

商戶表:身份證,姓名,地址,城市,州_id,郵編,國家,網址; 狀態表:ID,名稱,縮寫。當我列出一個州頁面時,我可以抓住所有擁有該州ID的企業。我只是不知道如何按城市列出,而沒有做同樣的事情。 – xtine 2010-08-18 07:49:20

回答

2

爲此更好的數據庫結構將是沿着這一線的東西:

Table: Location 
id 
parent_id 
name 
type 

Table: Business 
id 
location_id 
... 

你的城市和國家要形成tree

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

例如:

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

這樣,每個企業都屬於一個城市,並隱含到一個國家和一個國家,一切都有一個很好的ID。您也不能因在日本加利福尼亞州紐約開展業務而犯錯誤(目前可能)。

鑑於你有什麼,你只能通過一個名稱搜索過濾城市:

$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 2010-08-18 08:06:45

+0

@xtine對。不過,您需要小心生成拼寫變體的重複項。所以,界面明智的,你可能需要使用下拉列表(1.選擇國家,2.選擇狀態,...)或做自動完成或一些這樣的。 – deceze 2010-08-18 08:14:43

+0

你會如何建議我從目前的位置到更新的基於樹的版本去數據庫遷移腳本?而且,當我將基於樹的版本彈出到我的腦海時,我想到了自動完成下拉菜單。 :) – xtine 2010-08-19 05:45:15

相關問題