我在CakePHP中有一个列出业务的应用程序。我有一个商业模型/控制器,以及一个state_list模型/控制器。但是我希望更加详细,因此当用户点击状态页面时,它会列出该特定州中列出企业的所有城市。
然后,当他们点击特定城市时,它会显示一个页面,列出该特定城市中的所有业务。
如果没有所有城市列表的数据库表,我怎么能这样做呢?
答案 0 :(得分: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 )
这样每个企业都属于一个城市,并且隐含地属于一个州和一个国家,一切都有一个很好的身份。您也不能错误地在纽约,加利福尼亚,日本开展业务(目前可能)。
鉴于您所拥有的,您只能通过名称搜索过滤城市:
$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);