0

我在 CakePHP 中有一个列出企业的应用程序。我有一个业务模型/控制器,以及一个 state_list 模型/控制器。但是我想更详细一点,因此当用户单击州页面时,它会列出该特定州中列出企业的所有城市。
然后,当他们单击特定城市时,它会显示一个页面,其中列出了该州的所有企业特定的城市。

如果没有所有城市列表的数据库表,我怎么能做到这一点?

4

1 回答 1

2

为此目的,一个更好的数据库结构将是这样的:

Table: Location
id
parent_id
name
type

Table: Business
id
location_id
...

你的城市和州应该形成一棵树

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);
于 2010-08-18T08:01:54.583 回答